2015-06-06 7 views
2

Я следую учебному курсу на сайте Android. http://developer.android.com/training/basics/data-storage/databases.html#DefineContractНе удается получить доступ к строке из другого класса?

SQL_DATA_ENTRIES загорается красным цветом в FeedReaderDbHelper. Как мне получить доступ к FeedReaderDbHelper? Я иду с геттерами и сеттерами, или есть лучший способ?

// FeedReaderDbHelper

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

/** 
* Created by Neil Armstrong on 6/5/2015. 
*/ 
public class FeedReaderDbHelper extends SQLiteOpenHelper { 
    // 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); 
    } 
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     onUpgrade(db, oldVersion, newVersion); 
    } 
} 

// FeedReaderContract

import android.provider.BaseColumns; 

/** 
* Created by Neil Armstrong on 6/5/2015. 
*/ 
public final class FeedReaderContract { 
    // To prevent someone from accidentally instantiating the contract class, 
    // give it an empty constructor. 
    public FeedReaderContract() {} 

    /* 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"; 
     private static final String TEXT_TYPE = " TEXT"; 
     private static final String COMMA_SEP = ","; 
//this is what I am trying to get. 
     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; 

    } 
} 
+0

Их статический переменный доступ к нему с использованием classname.variablename как FeedReaderContract. TABLE_NAME – 3xplore

+0

, если это частная собственность, тогда вы должны использовать геттеры, и я не мог видеть какое-либо свойство с 'SQL_DATA_ENTRIES' в вашем вопросе или в учебнике, о котором вы упомянули? – prasad

+0

частные статические финальные Струнные 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 + // Любые другие опции для команды CREATE ")"; он находится в классе FeedReaderContract – null

ответ

0

Как вы используете private String SQL_CREATE_ENTRIES переменную в FreeReaderContract классе, вы должны использовать методы получения и установки для извлечения/редактирования.

Или вместо этого вы можете сделать их частные пакет и доступ к ним с помощью

FreeREaderContract.SQL_CREATE_ENTRIES

из FreeReaderDbHelper класса, как они static переменных. (Предполагая, что они находятся в одном пакете)

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