如何解决静态上下文中的非静态方法错误?
How to resolve non-static method errors from static context?
我明白了,实际上它在旧版本中是 运行ning 但在 Android 2.2 中不是 运行ning 这是代码...我不知道该怎么做将其替换为或有替代品。
所以我添加了整个代码以便能够理解真实的。我在 android studio 的旧版本 运行 上看到了这个问题。
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String Database_Name= "student.db";
public static final String Table_Name= "student_table";
public static final String COL_1= "id";
public static final String COL_2= "name";
public static final String COL_3= "surname";
public static final String COL_4= "marks";
public DatabaseHelper(Context context){
super(context, Database_Name,null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table" + Table_Name + " (id integer primary key auto increment, name text, surname text, marks ineteger)" );
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists" + Table_Name);
onCreate(db);
}
public boolean insertData(String name, String surname, String marks){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
ContentValues.put(COL_2,name);
ContentValues.put(COL_3,surname);
ContentValues.put(COL_4,marks);
long result = db.insert(Table_Name, null,contentValues);
if (result==-1) {
return false;
} else {
return true;
}
}
}
发生此错误是因为您混淆了 class.
的静态和非静态部分
举个例子:
public class Test {
public String testVariable = "Honk";
public static String methodTest() {
return testVariable;
}
public static String methodTest2() {
Test test = new Test();
return test.testVariable;
}
public String methodTest3() {
return testVariable;
}
}
方法测试
此测试将失败。您正在尝试从静态上下文 methodTest()
.
获取非静态变量 testVariable
访问方式:
String result = Test.methodTest();
方法测试2
这行得通。您正在创建一个新的 Test
class 实例,您可以正常访问变量 testVariable
。
访问方式:
String result = Test.methodTest2();
方法测试 3
这行得通。您正在从非静态上下文 methodTest3()
.
访问非静态变量 testVariable
访问方式:
Test test = new Test();
String result = test.methodTest();
分辨率
在没有看到您的其余代码的情况下,很难就更改内容向您提出建议。您在问题中提供的代码不太可能是罪魁祸首。
编辑
您的问题是您正在静态访问 ContentValues
class...
ContentValues.put(COL_2,name);
您需要使用您创建的变量:contentValues
。
我明白了,实际上它在旧版本中是 运行ning 但在 Android 2.2 中不是 运行ning 这是代码...我不知道该怎么做将其替换为或有替代品。 所以我添加了整个代码以便能够理解真实的。我在 android studio 的旧版本 运行 上看到了这个问题。
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String Database_Name= "student.db";
public static final String Table_Name= "student_table";
public static final String COL_1= "id";
public static final String COL_2= "name";
public static final String COL_3= "surname";
public static final String COL_4= "marks";
public DatabaseHelper(Context context){
super(context, Database_Name,null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table" + Table_Name + " (id integer primary key auto increment, name text, surname text, marks ineteger)" );
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists" + Table_Name);
onCreate(db);
}
public boolean insertData(String name, String surname, String marks){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
ContentValues.put(COL_2,name);
ContentValues.put(COL_3,surname);
ContentValues.put(COL_4,marks);
long result = db.insert(Table_Name, null,contentValues);
if (result==-1) {
return false;
} else {
return true;
}
}
}
发生此错误是因为您混淆了 class.
的静态和非静态部分举个例子:
public class Test {
public String testVariable = "Honk";
public static String methodTest() {
return testVariable;
}
public static String methodTest2() {
Test test = new Test();
return test.testVariable;
}
public String methodTest3() {
return testVariable;
}
}
方法测试
此测试将失败。您正在尝试从静态上下文 methodTest()
.
testVariable
访问方式:
String result = Test.methodTest();
方法测试2
这行得通。您正在创建一个新的 Test
class 实例,您可以正常访问变量 testVariable
。
访问方式:
String result = Test.methodTest2();
方法测试 3
这行得通。您正在从非静态上下文 methodTest3()
.
testVariable
访问方式:
Test test = new Test();
String result = test.methodTest();
分辨率
在没有看到您的其余代码的情况下,很难就更改内容向您提出建议。您在问题中提供的代码不太可能是罪魁祸首。
编辑
您的问题是您正在静态访问 ContentValues
class...
ContentValues.put(COL_2,name);
您需要使用您创建的变量:contentValues
。