Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
Java ANDROID SQL空指针GetWritableDatabase_Java_Sql_Database_Nullpointerexception_Null Pointer - Fatal编程技术网

Java ANDROID SQL空指针GetWritableDatabase

Java ANDROID SQL空指针GetWritableDatabase,java,sql,database,nullpointerexception,null-pointer,Java,Sql,Database,Nullpointerexception,Null Pointer,我在更新一个表中的三个值时遇到问题。当我在一个没有活动的java类中调用该函数时。如果我在活动存在的类中使用该代码,则可以工作 这是databasehelper类代码 public DatabaseHelper(Context ctx) { super(ctx, DATABASE_NAME, null, 1); } public DatabaseHelper() { super(null, DATABASE_NAME, null, 1); } public boolean

我在更新一个表中的三个值时遇到问题。当我在一个没有活动的java类中调用该函数时。如果我在活动存在的类中使用该代码,则可以工作

这是databasehelper类代码

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;
}
这是我称之为函数的类

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:尝试在空对象引用上调用虚拟方法“android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String,int,android.database.sqlite.SQLiteDatabase$CursorFactory,android.database.DatabaseErrorHandler)” 位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) 位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 位于com.example.sravan.test.DatabaseHelper.update1(DatabaseHelper.java:129) 位于com.example.sravan.test.subject\u class.update(subject\u class.java:27) 位于com.example.sravan.test.subjectlistadapter$1.onClick(subjectlistadapter.java:70) 在android.view.view.performClick上(view.java:5721) 在android.widget.TextView.performClick上(TextView.java:10931) 在android.view.view$PerformClick.run(view.java:22620) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:7409) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)


提前感谢

创建一个静态全局变量

      static Context appContext;
并在appContext中分配应用程序上下文

      appContext=getApplicationContext(); 
在主活动的onCreate()方法中。现在在非活动类中访问它

       new SetSql(MainActivity.appContext); 

生成静态全局变量static Context appContext;并在appContext中分配应用程序上下文。appContext=getApplicationContext();在主活动的onCreate()方法中。现在在非活动类中访问它。新的SetSql(MainActivity.appContext);-Ravi1187342 2012年4月13日9:28这对我很有帮助