ANDROID SQL 空指针getwritabledatabase
ANDROID SQL NULLPOINTER getwritabledatabse
我在更新 table.While 中的三个值时遇到问题 我在 java class 中调用该函数 activity.if 我使用该代码在 class 中,其中 activity 存在且有效。
这是数据库助手class代码
public DatabaseHelper(Context ctx) {
super(ctx, DATABASE_NAME, null, 1);
}
public DatabaseHelper() {
super(null, DATABASE_NAME, null, 1);
}
public boolean updateData(String subject, double present, double total) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, subject);
contentValues.put(COL_2, present);
contentValues.put(COL_3, total);
db.update(TABLE_NAME, contentValues, "SUBJECT = ?", new String[]{subject});
return true;
}
这是我调用函数的 class
private DatabaseHelper myDb = new DatabaseHelper();
public subject_class(){};
public subject_class(String subject, double num1, double num2) {
this.subject = subject;
this.num1 = num1;
this.num2 = num2;
}
public void update(String sub,double num1,double num2) {
myDb.update1(sub,num1,num2);
}
错误如下
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
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at com.example.sravan.test.DatabaseHelper.update1(DatabaseHelper.java:129)
at com.example.sravan.test.subject_class.update(subject_class.java:27)
at com.example.sravan.test.subjectlistadapter.onClick(subjectlistadapter.java:70)
at android.view.View.performClick(View.java:5721)
at android.widget.TextView.performClick(TextView.java:10931)
at android.view.View$PerformClick.run(View.java:22620)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7409)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
提前致谢
创建一个静态全局变量
static Context appContext;
并在 appContext 中分配应用上下文。
appContext=getApplicationContext();
在主 activity 的 onCreate() 方法中。现在在您的非 activity class 中访问它。
new SetSql(MainActivity.appContext);
我在更新 table.While 中的三个值时遇到问题 我在 java class 中调用该函数 activity.if 我使用该代码在 class 中,其中 activity 存在且有效。
这是数据库助手class代码
public DatabaseHelper(Context ctx) {
super(ctx, DATABASE_NAME, null, 1);
}
public DatabaseHelper() {
super(null, DATABASE_NAME, null, 1);
}
public boolean updateData(String subject, double present, double total) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, subject);
contentValues.put(COL_2, present);
contentValues.put(COL_3, total);
db.update(TABLE_NAME, contentValues, "SUBJECT = ?", new String[]{subject});
return true;
}
这是我调用函数的 class
private DatabaseHelper myDb = new DatabaseHelper();
public subject_class(){};
public subject_class(String subject, double num1, double num2) {
this.subject = subject;
this.num1 = num1;
this.num2 = num2;
}
public void update(String sub,double num1,double num2) {
myDb.update1(sub,num1,num2);
}
错误如下
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 at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) at com.example.sravan.test.DatabaseHelper.update1(DatabaseHelper.java:129) at com.example.sravan.test.subject_class.update(subject_class.java:27) at com.example.sravan.test.subjectlistadapter.onClick(subjectlistadapter.java:70) at android.view.View.performClick(View.java:5721) at android.widget.TextView.performClick(TextView.java:10931) at android.view.View$PerformClick.run(View.java:22620) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:7409) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
提前致谢
创建一个静态全局变量
static Context appContext;
并在 appContext 中分配应用上下文。
appContext=getApplicationContext();
在主 activity 的 onCreate() 方法中。现在在您的非 activity class 中访问它。
new SetSql(MainActivity.appContext);