2016-07-23 4 views
1

Я новичок в программировании, и я начинаю с Java и Android. Я хочу создать базу данных, поэтому я следил за официальной документацией: https://developer.android.com/training/basics/data-storage/databases.htmlДоступ к закрытым членам класса из другого класса

Моя проблема возникает, когда в классе Контракта члены для создания и ведения базы данных являются частными строками (SQL_CREATE_ENTRIES и SQL_DELETE_ENTRIES). Определяя класс DBHelper в другом файле, я просто не могу получить доступ к этим членам так, как он отображается в документации (класс FeedReaderDbHelper просто использует их, как если бы они были внутри его области). Итак, Android Studio просто положил предложение на красный цвет и говорит: «Не удается разрешить символ».

Что мне здесь делать? Я также читал о документации, что установщики/получатели не рекомендуются для Android.

+0

Есть и другие решения, которые вы могли бы использовать как Realm Java для обработки ваших потребностей базы данных; это намного проще и обрабатывает все для вас оптимизированным способом. – Eenvincible

+1

* сеттеры/геттеры не рекомендуются для Android * - Не знаете, где вы это читаете ... –

ответ

3

Положить SQL_CREATE_ENTRIES и SQL_DELETE_ENTRIES в класс DBHelper.

Из документов,

«Класс контракта является контейнером для констант, которые определяют имена для URIs, таблиц и столбцов.»

Следует только ввести схему базы данных. Логика, связанная с изменением базы данных, должна быть помещена в класс DBHelper.

0

по классу контракта, членам создавать и поддерживать базу данных являются частными строками (SQL_CREATE_ENTRIES и SQL_DELETE_ENTRIES). Определение DBHelper класса на другой файл, я просто не могу получить доступ, что члены так, как это кажется на документации (класс FeedReaderDbHelper просто использовать их, как если бы они были внутри него сфера)

Эти private поля должны быть помещены в класс SQLiteOpenHelper. Они используются в рамках этого класса для создания и удаления таблицы, управляемой этим классом. Вы не должны использовать эти строки SQL в другом месте.

Например,

public class FeedReaderDbHelper extends SQLiteOpenHelper { 

    private static final String TEXT_TYPE = " TEXT"; 
    private static final String COMMA_SEP = ","; 
    private static final String SQL_CREATE_ENTRIES = 
     "CREATE TABLE " + FeedEntry.TABLE_NAME + " (" + 
     FeedEntry._ID + " INTEGER PRIMARY KEY," + 
     FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP + 
     FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP + 
     ... // Any other options for the CREATE command 
     ")"; 

    private static final String SQL_DELETE_ENTRIES = 
     "DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME; 

    // If you change the database schema, you must increment the database version. 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "FeedReader.db"; 

    public FeedReaderDbHelper(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) { 
     // This database is only a cache for online data, so its upgrade policy is 
     // to simply to discard the data and start over 
     db.execSQL(SQL_DELETE_ENTRIES); 
     onCreate(db); 
    } 

    /* Inner class that defines the table contents */ 
    public static abstract class FeedEntry implements BaseColumns { 
     public static final String TABLE_NAME = "entry"; 
     public static final String COLUMN_NAME_ENTRY_ID = "entryid"; 
     public static final String COLUMN_NAME_TITLE = "title"; 
     public static final String COLUMN_NAME_SUBTITLE = "subtitle"; 
     ... 
    } 

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