Java错误:无法对非静态方法进行静态引用

Java错误:无法对非静态方法进行静态引用,java,static,Java,Static,我正在编写一个Android应用程序,并且出现了这个错误,但我不知道为什么。有人能帮我理解为什么我会犯这个错误吗 Cannot make a static reference to the non-static method updateScores(List<Score>) from the type DatabaseHandler 无法从类型DatabaseHandler对非静态方法UpdateStores(List)进行静态引用 这是相关代码 public class Sc

我正在编写一个Android应用程序,并且出现了这个错误,但我不知道为什么。有人能帮我理解为什么我会犯这个错误吗

Cannot make a static reference to the non-static method updateScores(List<Score>) from the type DatabaseHandler
无法从类型DatabaseHandler对非静态方法UpdateStores(List)进行静态引用
这是相关代码

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);    
    }
}
公共类记分表扩展了SherlockFragmentActivity{
List listScore=新建ArrayList();
public void updateListView(){
setAdapter(新的ScoreListAdapter(ctx、,
R.layout.score_row_item,listScore));
DatabaseHandler.UpdateStores(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扩展了SQLiteOpenHelper{
私有静态最终int数据库_VERSION=1;
私有静态最终字符串数据库\u NAME=“scoreKeeper”;
私有静态最终字符串表\u GAMES=“GAMES”;
私有静态最终字符串键\u NAME=“NAME”;
私有静态最终字符串键\u CHANGE=“scoreChange”;
私有静态最终字符串键\u TOTAL=“scoreTotal”;
公共数据库处理程序(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
字符串CREATE_GAMES_TABLE=“CREATE TABLE”+TABLE_GAMES+”(“
+键名称+“整数主键,”+键更改+“文本,”
+键_TOTAL+“TEXT”+”;
execSQL(创建游戏表);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+表_);
onCreate(db);
}
公共无效添加分数(分数){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(KEY_NAME,score.getName());
value.put(KEY_CHANGE,score.getScoreChange());
value.put(KEY_TOTAL,score.getScoreTotal());
//插入行
db.insert(表格,空,值);
db.close();
}
公共列表getAllScores(){
List scoreList=新的ArrayList();
String selectQuery=“SELECT*FROM”+桌上游戏;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
分数=新分数(“,”,“);
score.setName(cursor.getString(0));
score.setScoreChange(cursor.getString(1));
score.setScoreTotal(cursor.getString(2));
//将联系人添加到列表中
分数表。添加(分数);
}while(cursor.moveToNext());
}
返回记分表;
}
公共无效更新存储(列表分数){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL(“如果存在删除表”+表_);
onCreate(db);
ContentValues=新的ContentValues();
对于(int i=0;i
将方法
更新存储
更改为
静态
,如下所示:

 public static void updateScores(List<Score> score)
publicstaticvoidupdatescores(列表分数)

将方法
更新存储
更改为
静态
,如下所示:

 public static void updateScores(List<Score> score)
publicstaticvoidupdatescores(列表分数)

因为您正在使用静态引用访问该方法

DatabaseHandler.updateScores(listScore);   
表示具有类名

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

或者将
updateStores
作为静态方法

static public void updateScores()

但我怀疑您在
DatabaseHandler
类中有更多的代码。(作为其sqlite database helper类,您在该类中使用的是Activity context),因此最好创建
DatabaseHandler
类的实例,并将方法
UpdateStores()
与实例一起使用。

,因为您是通过静态引用访问该方法的

DatabaseHandler.updateScores(listScore);   
DatabaseHandler dbh = new DatabaseHandler();
dbh.updateScores(listScore);
表示具有类名

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

或者将
updateStores
作为静态方法

static public void updateScores()

但我怀疑您在
DatabaseHandler
类中有更多的代码。(作为它的sqlite数据库助手类,您在这个类中使用的是活动上下文),因此最好创建
DatabaseHandler
类的实例,并将方法
updatestores()
与实例一起使用。

您可以

DatabaseHandler dbh = new DatabaseHandler();
dbh.updateScores(listScore);
公共无效更新存储(列表分数)

作为静态或您可以在调用者类中创建
**DatabaseHandler**
的对象:

记分表


你可以选择

公共无效更新存储(列表分数)

作为静态或您可以在调用者类中创建
**DatabaseHandler**
的对象:

记分表


错误消息告诉您执行问题:您以静态方式引用非静态方法。 有两种可能性: 1.您希望使用静态方法(请参阅其他答案) 2.你想要一个非静态的方法。然后使用以下调用方代码段:

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

错误消息告诉您执行问题:您以静态方式引用非静态方法。 有两种可能性: 1.您希望使用静态方法(请参阅其他答案) 2.你想要一个非静态的方法。然后使用以下调用方代码段:

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

错误是因为您正在使用类名调用非静态方法 1.使您的方法updateScores为静态或 2.创建Da的实例