2016-07-23 2 views
1

Я следую учебнику Android developers, чтобы настроить базу данных, но у меня возникла проблема. Это мой файл схема:Невозможно получить схему контекста и доступа из базы данных

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()); 

} 

Я не может получить доступ к вспомогательному классу правильно. getContext() функция не работает, и я получаю сообщение об ошибке:

Cannot resolve method getContext

Я попытался сделать это:

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

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

Я до сих пор не имеют каких-либо удачи. Любые предложения по решению этой проблемы?

+0

В каком классе вы пытаетесь создать экземпляр 'ContactsDBhelper'? Вам нужно передать действительный 'Context' в качестве параметра конструктора. – earthw0rmjim

+0

Ваш класс 'ContactDBProcess' должен быть определен в классе, который имеет' getContext() 'или ему необходимо расширить такой класс. Или вы можете передать действительный 'context' в свой конструктор, а затем использовать эту переменную вместо' getContext() '. – Shaishav

ответ

0

Самый простой способ получить доступ к вашему контексту приложения из любого места в вашем проекте будет определить метод внутри вашего приложения подклассу, как это:

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; 
    } 
} 

ПРИМЕЧАНИЕ

Если бы вы были не расширяет класс Application в вашем проекте, вы можете это сделать, но не забудьте указать имя своего приложения в AndroidManifest в подкласс, который вы создали выше (MyApplication).

Отсюда мы будем иметь доступ к контексту в любом месте!

MyApplication.getAppContext(); 

Удачи, и я надеюсь, что это поможет вам!

Смежные вопросы