Ich bin eine einfache Übung macht einen Broker zu bauen SQLite für den Zugriff auf meine Haupttätigkeit ist:android Studio Fehler: „java.lang.NullPointerException: Der Versuch, virtuelle Methode aufzurufen ...“
package com.example.mauro.localtest;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
public class MainActivity extends Activity {
DbBroker db = new DbBroker(this, "my_database", null, 1);
SQLiteDatabase sqldb = db.getWritableDatabase();
public int test = db.insertTest("New test", "Test created from app");
}
während die DbBroker Klasse:
package com.example.mauro.localtest;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Mauro on 09/06/2016.
*/
public class DbBroker extends SQLiteOpenHelper {
public DbBroker(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase arg0) {
arg0.execSQL("create table tests (id INTEGER PRIMARY KEY, publicid INTEGER, testname TEXT, description TEXT");
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
public int insertTest(String name, String desc){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues vals = new ContentValues();
vals.put("testname", name);
vals.put("description", desc);
return (int) db.insert("tests", null, vals);
}
}
Als ich das Projekt ausführen, dieser Fehler die App beendet:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mauro.localtest/com.example.mauro.localtest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
jemand mir helfen kann unders Und wo ist das Problem?
Haben Sie Aktivität in Manifest definiert? –
Ich werde Ihnen vorschlagen, einmal zu versuchen, indem Sie den Code als DbBroker ändern db = new DbBroker (getActivity(), "my_database", null, 1); Ab sofort sehe ich nur Kontext ist der Kandidat für null. Ich fand eine ähnliche Frage: http://stackoverflow.com/questions/30064080/android-app-crashes-on-startup-sqlite-nullpointerexception-in-contactsfragment http://stackoverflow.com/questions/29545524/android-nullpointerexception-unable-to-load-database-in-listview-in-a-fra Hoffnung Es kann Ihr Problem lösen. – pbajpai21
Ich denke, dass Sie Ihren DB-Broker bei womg initialisieren, aufgrund dessen der Kontext null ist. Teilen Sie bitte den Funktionscode, von dem diese Klasse initialisiert wird. –