如何从静态上下文中解决非静态方法错误?

时间:2016-11-11 13:34:34

标签: android android-studio static-methods

我得到了这个,实际上它是在旧版本中运行但没有在Android 2.2中运行这是代码......我不知道要替换它或者有替代方法。  所以我添加了整个代码,以便能够理解真实。问题我看到它运行在旧版本的Android工作室。

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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

发生此错误是因为您正在混淆类的静态和非静态部分。

举个例子:

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获取非静态变量methodTest()

访问:

String result = Test.methodTest();

methodTest2

这会奏效。您正在创建一个新的Test类实例,并且您可以正常访问变量testVariable

访问:

String result = Test.methodTest2();

methodTest3

这会奏效。您正在从非静态上下文testVariable访问非静态变量methodTest3()

访问:

Test test = new Test(); 
String result = test.methodTest();

分辨率

如果没有看到代码的其余部分,很难为您提供更改内容的建议。您在问题中提供的代码不太可能是罪魁祸首。

修改

您的问题是您正在静态访问ContentValues课程。

ContentValues.put(COL_2,name);

您需要使用您创建的变量:contentValues