Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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
创建SQLite的空指针-Android(java)_Java_Android_Sqlite_Nullpointerexception - Fatal编程技术网

创建SQLite的空指针-Android(java)

创建SQLite的空指针-Android(java),java,android,sqlite,nullpointerexception,Java,Android,Sqlite,Nullpointerexception,我在SQLite数据库中得到一个NullPointerException。我通过以下操作调用Results.java中的DatabaseHelper类: public class Results extends Activity { ... DatabaseHelper dh; public void onCreate(Bundle savedInstanceState) { ... dh = new DatabaseHelper(this);

我在SQLite数据库中得到一个NullPointerException。我通过以下操作调用Results.java中的DatabaseHelper类:

public class Results extends Activity {
    ...
    DatabaseHelper dh;

    public void onCreate(Bundle savedInstanceState) {
    ...
    dh = new DatabaseHelper(this);
    }

    public void showResults() {
        ...
        dh.insert(1, score, percentage);
    }
}
DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DB_NAME = "test1"; 
    private static final String DB_PATH = "/data/data/com.example.test/databases/";
    private static final String TABLE = "HighscoresList"; 

    // Table columns names. 
    private static final String RANK = "rank"; 
    private static final String SCORE = "score"; 
    private static final String PERCENTAGE = "percentage";

    private SQLiteDatabase myDB;

    public DatabaseHelper(Context context) { 
        super(context, DB_NAME, null, DATABASE_VERSION); 
        myDB = getWritableDatabase();  //Line 25
    }

    //Insert new record.
    public long insert(int rank, long score, int percentage) {
        ContentValues values = new ContentValues();
        values.put(RANK, rank);
        values.put(SCORE, score);
        values.put(PERCENTAGE, percentage);

        return myDB.insert(TABLE, null, values);
    }

    //Delete record.
    public boolean delete(long score) {
        //Need this?
        return true;
    }

    public void openDatabase() throws SQLException {
        //Open the database.
        String myPath = DB_PATH + DB_NAME;
        myDB = SQLiteDatabase.openDatabase(myPath,  null,  SQLiteDatabase.OPEN_READONLY);
    }

    public SQLiteDatabase getDatabase(){
        return this.myDB;
    }

    public synchronized void close() {
        if(myDB != null) {
            myDB.close();
        }
        super.close();
    }

    public void onCreate(SQLiteDatabase db) {
        myDB.execSQL("CREATE TABLE " + TABLE + " ("  //Line 62
                + RANK + " INTEGER,"
                + SCORE + " LONG,"
                + PERCENTAGE + " INTEGER"
                + ");");
    }
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
对数输出

12-18 22:01:53.210: E/AndroidRuntime(6313): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.Results}: java.lang.NullPointerException
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.os.Looper.loop(Looper.java:137)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.app.ActivityThread.main(ActivityThread.java:4745)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at java.lang.reflect.Method.invokeNative(Native Method)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at java.lang.reflect.Method.invoke(Method.java:511)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at dalvik.system.NativeStart.main(Native Method)
12-18 22:01:53.210: E/AndroidRuntime(6313): Caused by: java.lang.NullPointerException
12-18 22:01:53.210: E/AndroidRuntime(6313):     at com.example.test.DatabaseHelper.onCreate(DatabaseHelper.java:62)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at com.example.test.DatabaseHelper.<init>(DatabaseHelper.java:25)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at com.example.test.Results.onCreate(Results.java:33)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.app.Activity.performCreate(Activity.java:5008)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
12-18 22:01:53.210: E/AndroidRuntime(6313):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
12-18 22:01:53.210: E/AndroidRuntime(6313):     ... 11 more
12-18 22:01:53.210:E/AndroidRuntime(6313):java.lang.RuntimeException:无法启动活动组件信息{com.example.test/com.example.test.Results}:java.lang.NullPointerException
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.app.ActivityThread.access$600(ActivityThread.java:130)
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.os.Handler.dispatchMessage(Handler.java:99)上
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.os.Looper.loop(Looper.java:137)
12-18 22:01:53.210:E/AndroidRuntime(6313):位于android.app.ActivityThread.main(ActivityThread.java:4745)
12-18 22:01:53.210:E/AndroidRuntime(6313):位于java.lang.reflect.Method.Invokenactive(本机方法)
12-18 22:01:53.210:E/AndroidRuntime(6313):在java.lang.reflect.Method.invoke(Method.java:511)
12-18 22:01:53.210:E/AndroidRuntime(6313):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-18 22:01:53.210:E/AndroidRuntime(6313):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-18 22:01:53.210:E/AndroidRuntime(6313):在dalvik.system.NativeStart.main(本机方法)
12-18 22:01:53.210:E/AndroidRuntime(6313):由以下原因引起:java.lang.NullPointerException
12-18 22:01:53.210:E/AndroidRuntime(6313):在com.example.test.DatabaseHelper.onCreate(DatabaseHelper.java:62)
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
12-18 22:01:53.210:E/AndroidRuntime(6313):位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
12-18 22:01:53.210:E/AndroidRuntime(6313):位于com.example.test.DatabaseHelper。(DatabaseHelper.java:25)
12-18 22:01:53.210:E/AndroidRuntime(6313):位于com.example.test.Results.onCreate(Results.java:33)
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.app.Activity.performCreate(Activity.java:5008)上
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)上
12-18 22:01:53.210:E/AndroidRuntime(6313):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
12-18 22:01:53.210:E/AndroidRuntime(6313):。。。还有11个
是什么导致了NPE


另外,对于我正在尝试实现的SQLite highscores,任何关于代码结构的帮助都会很有帮助。

用db替换myDB。db作为参数传递,并且在getWritableDatabase中调用onCreate,这是在myDB被初始化为返回值之前(因为getWritableDatabase尚未返回),因此myDB是null@njzk2-您能否指定建议将myDB替换为db的位置?NPE在哪里。。。在onCreate中,DatabaseHelper的第62行。我将所有提到的“myDB”都改为“db”,它纠正了这个问题。非常感谢。