将SQLite数据库与片段一起使用

时间:2016-02-23 12:38:39

标签: android sqlite android-fragments

我有一个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};

1 个答案:

答案 0 :(得分:1)

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

更改

static final String DATABASE_TABLE = "yourpass";

public static final String DATABASE_TABLE = "yourpass";