无法对非静态方法进行静态引用

时间:2012-08-23 15:26:13

标签: android sqlite cursor static-methods onclicklistener

我收到一个错误的方法,允许类访问我的数据库。错误发生在.getReadableDatabase()。收到的错误如下。不知道如何解决这个错误。

 Cannot make a static reference to the non-static method getReadableDatabase() from the type SQLiteOpenHelper

方法:

 public static boolean vaidateUser(String username, String password) {
        Cursor c = getReadableDatabase().rawQuery(
                "SELECT * FROM " + TABLE_NAME_CREDENTIALS + " WHERE "
                        + COLUMN_NAME_USERNAME + "='" + username +"'AND "+COLUMN_NAME_PASSWORD+"='"+password+"'" ,  null);
       if (c.getCount()>0)
          return true;
          return false;

用于调用此方法:

  lsLogin.setOnClickListener (new OnClickListener() {

                @Override
                public void onClick(View v) {
                    //check login
                    String username = lsUsername.getText().toString();
                    String password = lsPassword.getText().toString();
                    try{
                        if(LoginDB.vaidateUser(username,password)) {
                            Intent goToNextActivity = new Intent(getApplicationContext(), menu.class);
                            startActivity(goToNextActivity);

                                Toast.makeText(LoginScrExample.this,"Login Sucessful",Toast.LENGTH_LONG).show();
                            }else{
                                Toast.makeText(LoginScrExample.this,"Invalid Username/Password",Toast.LENGTH_LONG).show();
                            }

                            }

3 个答案:

答案 0 :(得分:3)

这意味着您需要一个对象实例来调用此方法,因为它不是static

执行以下操作:Cursor c = new YourObject().getReadableDatabase()...

或者也可以调用被调用的方法static

答案 1 :(得分:3)

因为您正在调用非静态方法而抛出错误:

getReadableDatabase();

您在静态方法中调用的任何方法也必须是静态的。

要修复它,要么从静态方法中删除静态,要么为所有使用的方法添加静态。

答案 2 :(得分:0)

这是SQLiteOpenHelper的方法。

所以这样做:

Cursor c = new SQLiteOpenHelper().getReadableDatabase()..

SQLiteOpenHelper soh = new SQLiteOpenHelper();
Cursor c = soh().getReadableDatabase()..