Java错误:无法使静态参考非静态方法(Java Error: Cannot make a stat

2019-07-19 11:41发布

我正在写一个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);    
    }
}

这里的数据库处理器类。 我试图使功能静态的,但它不会工作,由于错误的方式。

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

Answer 1:

因为你正在访问的静态参考方法

DatabaseHandler.updateScores(listScore);   

与类名字的意思..

你必须做的实例DatabaseHandler类,并使用该方法。

或作出updateScores静态方法一样,

static public void updateScores()

但是,我中有你有更多的代码的疑问DatabaseHandler类。 (作为其SQLite数据库辅助类使用的是这一类的活动范围内),以便更好地使实例 DatabaseHandler类和使用方法updateScores()与实例。



Answer 2:

public void updateScores(List<Score> score)

改成

public static void updateScores(List<Score> score) 

为什么?

由于使用的是静态调用

DatabaseHandler.updateScores(listScore)


Answer 3:

更改方法updateScoresstatic ,如下:

 public static void updateScores(List<Score> score)


Answer 4:

DatabaseHandler dbh = new DatabaseHandler();
dbh.updateScores(listScore);


Answer 5:

您可以使该方法

公共无效updateScores(名单得分)

静态或者你可以让一个对象**DatabaseHandler **在调用类:

得分列表



Answer 6:

错误消息告诉你exectly问题:你在静态的方式引用非静态方法。 有两种可能性:1。你想有静态方法(见其他答案)2.你想有非静态方法。 然后用这个来电显示的代码片段:

DatabaseHandler helper = new DatabaseHandler();
helper.updateScores(listScore);


Answer 7:

错误是因为你使用的类名。为了克服这一错误调用非静态方法,你必须做下面的事情1的任何一个。 让你的方法updateScores为静态或2。 创建数据库处理器的一个实例,并调用使用该对象调用该方法。

使用类名调用方法需要方法是静态



文章来源: Java Error: Cannot make a static reference to the non-static method
标签: java static