Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLiteDatabase NullpointerException_Android_Sqlite_Nullpointerexception - Fatal编程技术网

Android SQLiteDatabase NullpointerException

Android SQLiteDatabase NullpointerException,android,sqlite,nullpointerexception,Android,Sqlite,Nullpointerexception,好的,现在完整代码: DBOpenHelper: public class DBOpenHelper extends SQLiteOpenHelper { private SQLiteDatabase mDatabase; private static final int DATABASE_VERSION = 1; private static String DATABASE_NAME = "RTDB"; private static final String DB_TABLE_NAM

好的,现在完整代码:

DBOpenHelper:

public class DBOpenHelper extends SQLiteOpenHelper {

 private SQLiteDatabase mDatabase;
 private static final int DATABASE_VERSION = 1;
 private static String DATABASE_NAME = "RTDB";
 private static final String DB_TABLE_NAME1 = "playertable";
 private static final String DB_TABLE_NAME2 = "itemtable";
 private static final String DB_CREATE_TABLE_PT = 
         "CREATE TABLE IF NOT EXISTS" + DB_TABLE_NAME1 + " (" 
         + "ID INT(1) NOT NULL ,"
         + "Name VARCHAR(30) ,"
         + "HP INT(3) ,"
         + "Satisfaction INT(3) ,"
         + "Hygiene INT(1) , "
         + "IsAlive INT(1) "
         + " )"
         ;

 private static final String DB_CREATE_TABLE_IT = "CREATE TABLE IF NOT EXISTS"
            + DB_TABLE_NAME2 + " ("
            + "Money INT(3) ,"
            + "Gas INT(3) ,"
            + "Food INT(3) ,"
            + "Toiletries INT(3) ,"
            + "Spareparts INT(3) ,"
            + "Meds INT(3) ,"
            + "Tents INT(3) ,"
            + "Ration INT(1) ,"
            + "Trabbihp INT(3) ,"
            + "Trabbispeed INT(2) ,"
            + " )"
            ;


 public DBOpenHelper(Context context, String databaseName) {
        super(context,  databaseName, null, DATABASE_VERSION);
    }




@Override
public void onCreate(SQLiteDatabase db) {
    mDatabase = db;
    mDatabase = SQLiteDatabase.openOrCreateDatabase(DATABASE_NAME,null);
    mDatabase.execSQL(DB_CREATE_TABLE_PT);
    mDatabase.execSQL(DB_CREATE_TABLE_IT);
    DB.savePlayer(Resource.playerArray);
}


@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

}
}

DB:

公共类数据库{
静态语境;
私有静态DBOpenHelper dbHelper=新的DBOpenHelper(上下文,“RTDB”);
公共静态SQLiteDatabase db=dbHelper.getWritableDatabase();
私有静态ContentValues itemValues=新ContentValues();
私有静态ContentValues playerValues=新ContentValues();
//达滕班克的斯皮埃亨·德斯皮勒-普拉耶雷·穆斯�伯格本·沃登
公共静态无效保存播放器(播放器[]){

对于(int i=0;i,我看到您没有初始化数据库:

private static DBOpenHelper dbHelper = new DBOpenHelper(context);
public static SQLiteDatabase db = dbHelper.getWritableDatabase();
您需要在
DBOpenHelper
类中有一个构造函数,您可以在其中设置项目的数据库名称。您正在
DB类中设置数据库,但从未使用它:

private static String filename = "RTDB.sql";
这就是为什么您会得到
NullPointerException
,因为您无法获得任何数据库

编辑:您可以执行以下操作:

public DBOpenHelper(Context context, String databaseName) {
    super(context,  databaseName, null, DATABASE_VERSION);
}
这样,在初始化数据库时,可以设置要使用的数据库的名称

static Context context;
private static DBOpenHelper dbHelper = new DBOpenHelper(context, "RTDB.sql");

我猜
context==null

字符串“filename”是我尝试过的另一种方法的残余。因此,我必须在DBOpenHelper构造函数中添加一行,将databasename设置为我给构造函数的值?您必须知道超级构造函数调用中的字符串“DATABASE\u NAME”是Str之一我没有发布btw thx来帮助您确定您的数据库已创建。请检查DDMS以查看它是否存在。这是我的问题的一部分,我不知道它是否已创建。getWritableDatabase调用应该创建它,不是吗?不知道在DDMS中从何处查找数据库-但我猜它还不存在。请检查DDMS->data->yourpackage name->data,如果数据库已经创建,您必须查看它。不要忘记,您必须在DBOpenHelper类的onCreate方法中创建数据库。我原以为数据库的实际创建会得到处理。好的,现在我在DBOpenHelper的onCreate中添加了以下行:“SQLiteDatabase.openOrCreateDatabase(“RTDB”,null);”。我想这应该可以解决问题,现在我可以在DDMS中看到数据库了。尽管如此,空指针问题仍然存在
static Context context;
private static DBOpenHelper dbHelper = new DBOpenHelper(context, "RTDB.sql");