繁体   English   中英

从另一个类访问类私有成员

[英]Accessing class private members from another class

我是编程新手,我从Java和Android开始。 我想创建一个数据库,所以我遵循了官方文档: https//developer.android.com/training/basics/data-storage/databases.html

在Contract类中,创建和维护数据库的成员是私有字符串(SQL_CREATE_ENTRIES和SQL_DELETE_ENTRIES)时出现问题。 在另一个文件上定义DBHelper类,我只是无法按照文档中显示的方式访问这些成员(FeedReaderDbHelper类只是使用它们就像它们在它的范围内一样)。 所以Android Studio只是把句子放在红色上并说:“无法解析符号”。

我该怎么办? 我也读到了不建议用于Android的setter / getters的文档。

SQL_CREATE_ENTRIESSQL_DELETE_ENTRIES放在DBHelper类中。

从文档中,

“契约类是定义URI,表和列名称的常量的容器。”

只应将数据库的模式放在那里。 有关更改数据库的逻辑应该放在DBHelper类中。

在Contract类中,创建和维护数据库的成员是私有字符串( SQL_CREATE_ENTRIESSQL_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";
        ...
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM