【问题标题】:Using SQLite Database with Fragments使用带有片段的 SQLite 数据库
【发布时间】:2016-02-23 12:38:39
【问题描述】:

我有一个 DBHelper 类可以使用 SQLite。在正常活动下,它工作得很好。我想学习碎片。但现在我无法访问DatabaseHelper 类。说 Database_TABLE 不是公共的,不能在包外访问。我不知道该怎么办。也许只是将DatabaseHelper 移动到碎片包?

我的 DatabaseHelper 类:

package com.blogspot.rossokam.acharsoz;

import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;

/**
  * Created by nagizade on 2/2/16.
  */
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1;
 static final String DATABASE_TABLE = "yourpass";

public static final String SITE_NAME_COLUMN = "site_name";
public static final String LOGIN_COLUMN = "login";
public static final String PASSWORD_COLUMN = "password";

private static final String DATABASE_CREATE_SCRIPT = "create table "
        + DATABASE_TABLE + " (" + BaseColumns._ID
        + " integer primary key autoincrement, " + SITE_NAME_COLUMN
        + " text not null, " + LOGIN_COLUMN + " text, " + PASSWORD_COLUMN
        + " text);";

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

public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                      int version) {
    super(context, name, factory, version);
}

public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                      int version, DatabaseErrorHandler errorHandler) {
    super(context, name, factory, version, errorHandler);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE_SCRIPT);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Запишем в журнал
    Log.w("SQLite", "Обновляемся с версии " + oldVersion + " на версию " + newVersion);

    // Удаляем старую таблицу и создаём новую
    db.execSQL("DROP TABLE IF IT EXISTS " + DATABASE_TABLE);
    // Создаём новую таблицу
    onCreate(db);
}

}

部分有错误的片段

 mDatabaseHelper = new DatabaseHelper(getActivity(), "mydatabase.db", null, 1);
    mSqLiteDatabase = mDatabaseHelper.getReadableDatabase();



    ListView siyahi = getActivity().;

    registerForContextMenu(siyahi);

    cursor =  mSqLiteDatabase.rawQuery("select * from "+ DatabaseHelper.DATABASE_TABLE, null);
    String[] headers = new String[] {DatabaseHelper.SITE_NAME_COLUMN, DatabaseHelper.LOGIN_COLUMN,DatabaseHelper.PASSWORD_COLUMN};

【问题讨论】:

  • 请贴出你的片段代码和DatabaseHelper
  • 将变量公开,现在是内部变量。

标签: android sqlite android-fragments


【解决方案1】:

您不能从定义它的包外部访问DATABASE_TABLE,因为它是internal(如果没有写入访问修饰符,则默认为internal)。您需要做的就是将其设为public

改变

static final String DATABASE_TABLE = "yourpass";

public static final String DATABASE_TABLE = "yourpass";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2018-02-24
    • 2015-10-26
    • 2014-08-07
    • 2017-01-22
    • 2011-08-12
    • 2015-10-24
    相关资源
    最近更新 更多