Java 错误 : Cannot make a static reference to the non-static method

标签 java static

我正在编写一个 Android 应用程序并收到此错误,但我不确定为什么。有人可以帮助我理解为什么会出现此错误吗?

Cannot make a static reference to the non-static method updateScores(List<Score>) from the type DatabaseHandler

这是相关代码。

public class ScoreList extends SherlockFragmentActivity {
    List<Score> listScore = new ArrayList<Score>();
    public void updateListView() {
        listViewScore.setAdapter(new ScoreListAdapter(ctx,
                R.layout.score_row_item, listScore));
        DatabaseHandler.updateScores(listScore);    
    }
}

这是 DatabaseHandler 类。我尝试将函数设置为静态,但由于错误,它不会那样工作。

public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "scoreKeeper";
    private static final String TABLE_GAMES = "games";    
    private static final String KEY_NAME = "name";
    private static final String KEY_CHANGE = "scoreChange";
    private static final String KEY_TOTAL = "scoreTotal";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_GAMES_TABLE = "CREATE TABLE " + TABLE_GAMES + "("
                + KEY_NAME + " INTEGER PRIMARY KEY," + KEY_CHANGE + " TEXT,"
                + KEY_TOTAL + " TEXT" + ")";
        db.execSQL(CREATE_GAMES_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_GAMES);
        onCreate(db);
    }

    public void addScore(Score score) {
        SQLiteDatabase db = this.getWritableDatabase();    
        ContentValues values = new ContentValues();
        values.put(KEY_NAME, score.getName()); 
        values.put(KEY_CHANGE, score.getScoreChange());
        values.put(KEY_TOTAL, score.getScoreTotal());       

        // Inserting Row
        db.insert(TABLE_GAMES, null, values);
        db.close(); 
    }

    public List<Score> getAllScores() {
        List<Score> scoreList = new ArrayList<Score>();
        String selectQuery = "SELECT  * FROM " + TABLE_GAMES;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                Score score = new Score("","","");
                score.setName(cursor.getString(0));
                score.setScoreChange(cursor.getString(1));
                score.setScoreTotal(cursor.getString(2));
                // Adding contact to list
                scoreList.add(score);
            } while (cursor.moveToNext());
        }

        return scoreList;       
    }

    public void updateScores(List<Score> score) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_GAMES);
        onCreate(db);

        ContentValues values = new ContentValues();
        for(int i = 0; i < score.size(); i++){
            values.put(KEY_NAME, score.get(i).getName());
            values.put(KEY_CHANGE, score.get(i).getScoreChange());     
            values.put(KEY_TOTAL, score.get(i).getScoreTotal());    
        }       
    }
}

最佳答案

因为你访问的是静态引用的方法

DatabaseHandler.updateScores(listScore);   

表示类名..

您必须创建一个 DatabaseHandler 类的实例并使用该方法。

或者将 updateScores 作为静态方法,例如,

static public void updateScores()

但我怀疑您在 DatabaseHandler 类中是否有更多代码。 (作为它的 sqlite 数据库助手类,你在这个类中使用 Activity 上下文)所以更好地制作 DatabaseHandler 类的 instance 并使用方法 updateScores() 实例。

关于Java 错误 : Cannot make a static reference to the non-static method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14744746/

相关文章:

c# - 为什么在使用静态导入时不能将扩展方法作为静态方法调用?

c - 变量类型的初始化和更新

c++ - 为什么不构造内部类? C++

java - Java 公历日历和日期格式

java - Google 云 pub/sub 与标准 java 环境集成

java - 仅根据密码生成 AES key

Java 静态初始化行为

java - 如何概括这些重复的代码块?

java - 使用 jackson 反序列化为自定义对象的 HashMap

asp.net - 在 ASP.NET 应用程序中存储单例实例的最佳实践