0

此代码使应用程序崩溃,如果我从静态变量中引用数据库名称,它将起作用。当我尝试从 strings.xml 获取它时,它会使应用程序崩溃。知道为什么会失败吗?这是一个类而不是一个活动,所以我导入了 android.content.res.Resources。另外,如果我尝试 context.getString 它也会崩溃。

import android.content.Context;
import android.content.res.Resources;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

//public static final String DATABASE_NAME = "library.db";
public static final String TITLE = "title";
public static final String AUTHOR = "author";
public static final String ISBN = "isbn";


public DatabaseHelper(Context context) {
    super(context, Resources.getSystem().getString(R.string.DATABASE_NAME), null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE books (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT, isbn TEXT);");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}

}

4

3 回答 3

1

您不需要为数据库名称使用字符串资源,实际上这样做没有多大意义。字符串资源主要用于用户将看到的任何内容,以便您可以为其他配置(特别是其他语言)提供替代资源。您提供的本质上是数据库的文件名。由于这完全在您的应用程序内部并且用户永远不会看到它,因此您应该只使用带有您想要的数据库文件名称的静态最终字符串。

/* Database file name */
private static final String BD_NAME = "something.db";

public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, null);
}
于 2013-01-02T04:35:26.657 回答
0

这是错误的

super(context, Resources.getSystem().getString(R.string.DATABASE_NAME), null, 1);

尝试这个

super(context, context.getResources().getString(R.string.DATABASE_NAME), null, 1);
于 2013-01-02T04:20:45.640 回答
0

改变 Resources.getSystem().getString(R.string.DATABASE_NAME)

context.getResources().getString(R.string.DATABASE_NAME)
于 2013-01-02T04:21:14.997 回答