Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从数据库获取上下文和访问架构_Java_Android_Android Sqlite_Android Database - Fatal编程技术网

Java 无法从数据库获取上下文和访问架构

Java 无法从数据库获取上下文和访问架构,java,android,android-sqlite,android-database,Java,Android,Android Sqlite,Android Database,我正在按照教程设置数据库,但我遇到了一个问题。这是我的架构文件: public final class ContactsDBSchema { public ContactsDBSchema(){}; public static abstract class ContactsEntry implements BaseColumns { public static final String TABLE_NAME = "contacts";

我正在按照教程设置数据库,但我遇到了一个问题。这是我的架构文件:

public final class ContactsDBSchema {

    public ContactsDBSchema(){};

    public static abstract class ContactsEntry implements BaseColumns
    {
        public static final String TABLE_NAME = "contacts";
        public static final String COLUMN_CONTACT__ID = "contact_id";
        public static final String COLUMN_CONTACT__NAME = "contact_name";
        public static final String COLUMN_CONTACT__PHONE = "contact_phone";

    }

    public class ContactsDBhelper extends SQLiteOpenHelper
    {
        public static final int DATABASE_VERSION = 1;
        public static final String DATABASE_NAME = "contacts.db";

        public String SQL_CREATE_ENTRIES = "create table" + ContactsEntry.TABLE_NAME + ContactsEntry.COLUMN_CONTACT__ID +"INTEGER PRIMARY KEY AUTOINCREMENT," + ContactsEntry.COLUMN_CONTACT__NAME + "TEXT," + ContactsEntry.COLUMN_CONTACT__PHONE + "TEX";

        public String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS" + ContactsEntry.TABLE_NAME ;

        public ContactsDBhelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        public void onCreate(SQLiteDatabase db) {
            db.execSQL(SQL_CREATE_ENTRIES);
        }

        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL(SQL_DELETE_ENTRIES);
            onCreate(db);
        }

        public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            onUpgrade(db, oldVersion, newVersion);
        }

    }
}
现在的问题是,当我试图从另一个类(如此类)访问它时:

public class ContactsDBprocess {

    ContactsDBSchema.ContactsDBhelper contactsHelper = new ContactsDBSchema.ContactsDBhelper(getContext());

}
我无法正确访问helper类。
getContext()
函数不起作用,我收到一个错误:

无法解析方法
getContext

我试着这样做:

ContactsDBSchema.ContactsDBhelper contactsHelper = new ContactsDBSchema.ContactsDBhelper(this)

ContactsDBSchema.ContactsDBhelper contactsHelper = new ContactsDBSchema.ContactsDBhelper(getApplicationContext())

我还是一点运气都没有。关于如何解决此问题的任何建议?

从项目中的任何位置访问应用程序上下文的最简单方法是在应用程序子类中定义一个方法,如下所示:

public class MyApplication extends Application{
   private static Context context;

   @Override
   public void onCreate(){

      super.onCreate();

      MyApplication.context = getApplicationContext();


   }

   public static Context getAppContext(){
      return MyApplication.context;
   }
}
注意

如果您尚未在项目中扩展
应用程序
类,则可以这样做,但请记住在
AndroidManifest
中将应用程序的名称设置为您在上面创建的子类(
MyApplication

从这里,您可以确定我们可以访问任何地方的上下文

MyApplication.getAppContext();

祝你好运,我希望这对你有帮助

从项目中的任何位置访问应用程序上下文的最简单方法是在应用程序子类中定义一个方法,如下所示:

public class MyApplication extends Application{
   private static Context context;

   @Override
   public void onCreate(){

      super.onCreate();

      MyApplication.context = getApplicationContext();


   }

   public static Context getAppContext(){
      return MyApplication.context;
   }
}
注意

如果您尚未在项目中扩展
应用程序
类,则可以这样做,但请记住在
AndroidManifest
中将应用程序的名称设置为您在上面创建的子类(
MyApplication

从这里,您可以确定我们可以访问任何地方的上下文

MyApplication.getAppContext();

祝你好运,我希望这对你有帮助

您试图在哪个类中实例化
ContactsDBhelper
?您需要将有效的
上下文
作为构造函数参数传递。您的
ContactDBProcess
类需要在具有
getContext()
的类中定义,或者需要扩展此类。或者,您可以将有效的
上下文
传递给其构造函数,然后使用该变量而不是
getContext()
。您试图在哪个类中实例化
ContactsDBhelper
?您需要将有效的
上下文
作为构造函数参数传递。您的
ContactDBProcess
类需要在具有
getContext()
的类中定义,或者需要扩展此类。或者,您可以将有效的
上下文
传递给其构造函数,然后使用该变量而不是
getContext()