Can';t在Android SQLite上制作积垢

Can';t在Android SQLite上制作积垢,android,database,android-sqlite,Android,Database,Android Sqlite,我正在尝试做一个游戏,将保持其本地数据库的高分,并将更新它,如果最后一个分数大于一个在数据库。但是有一个小问题我想不出来。我无法从db和游标中获取值。getCount()始终返回0。我希望在创建db的一开始,highscore的初始值为0 这是我的密码: package com.example.recepinanc.countdowntimer; 导入android.content.ContentValues; 导入android.content.Context; 导入android.data

我正在尝试做一个游戏,将保持其本地数据库的高分,并将更新它,如果最后一个分数大于一个在数据库。但是有一个小问题我想不出来。我无法从db和游标中获取值。getCount()始终返回0。我希望在创建db的一开始,highscore的初始值为0

这是我的密码:

package com.example.recepinanc.countdowntimer;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.DatabaseErrorHandler;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.util.Log;
/**
*由recepinanc于2016年3月29日创建。
*/
公共类DBHelper扩展了SQLiteOpenHelper{
私有静态字符串数据库\u NAME=“数据库\u NAME”;
私有静态字符串TABLE_NAME=“TABLE_NAME”;
私有静态字符串播放器\u NAME=“播放器\u NAME”;
私有静态字符串播放器\u HIGHSCORE=“播放器\u high\u score”;
私有静态字符串播放器\u ID=“播放器\u ID”;
私有静态字符串CREATE_PLAYER_TABLE=“CREATE TABLE”+TABLE_NAME+”(“+PLAYER_ID+”整数主键,“+PLAYER_NAME+”文本,“+PLAYER_HIGHSCORE+”整数默认值0)”;
@凌驾
public void onCreate(SQLiteDatabase db){
execSQL(创建播放器表);
}
公共DBHelper(上下文上下文、字符串名称、SQLiteDatabase.CursorFactory工厂、int版本、DatabaseErrorHandler errorHandler){
super(上下文、名称、工厂、版本、errorHandler);
}
公共DBHelper(上下文){
super(上下文,数据库名称,null,1);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+创建播放器表);
onCreate(db);
}
公共无效insertHighScore(整数分数){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
价值观。放(球员高分,得分);
db.insert(表名称,空,值);
db.close();
}
public int getHighScore(){
SQLiteDatabase db=this.getReadableDatabase();
游标游标=db.query(表_NAME,new String[]{PLAYER\u HIGHSCORE},null,null,null,null,null);
如果(光标!=null){
cursor.moveToFirst();
Log.i(“Get Count:,cursor.getCount()+”);
}
返回cursor.getInt(2);
}
public void updateHighScore(int newHighScore){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL(“更新”+表名+“设置”+玩家高分+“=”+新高分+”,其中“+玩家ID+”=1”);
Log.i(“更新”,“更新!”);
db.close();
}
}
public class GameOver扩展了活动{
DBHelper-DBHelper;
静态int高分;
文本视图最佳;
图像视图重复;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.game_over_layout);
dbhelper=newdbhelper(getApplicationContext());
highScore=dbhelper.getHighScore();
重复=(ImageView)findViewById(R.id.play_);
最佳=(TextView)findViewById(R.id.best\u score\u tv);
best.setText(dbhelper.getHighScore()+);
int score=getIntent().getIntExtra(MainActivity.CLICK_COUNTS,0);
dbhelper.insertHighScore(分数);
如果(分数>高分){
dbhelper.updateHighScore(分数);
Log.i(“HighScoreNew”,dbhelper.getHighScore()+”);
}
repeat.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(GameOver.this,MainActivity.class);
星触觉(意向);
完成();
}
});
TextView clickCountTextView=(TextView)findViewById(R.id.clickCounts\u TextView);
单击CountTextView.setText(分数+“”);
}

}
您需要首先启动事务,然后将其标记为成功并结束。下面给出了如何插入的示例:

 try {  
       SQLiteDatabase db = this.getWritableDatabase();
       ContentValues values = new ContentValues();
       db.beginTransaction();
       values.put(PLAYER_HIGHSCORE, score);
       db.insert(TABLE_NAME, null, values);
       db.setTransactionSuccessful();
     } 
finally {
       db.endTransaction();
   }

为什么我得到了否决票?谢谢,但在我以前的应用程序中,我用了上面的方法,但它仍然有效,我认为问题不在于交易。您还有其他建议吗?@Recomer,使用以下查询获得最高分数
db.query(表_名称,新字符串[]{“MAX(“+PLAYER_HIGHSCORE+”)},null,null,null,null)我的数据库中会保留多个分数,对吗?我不会更新它吗?这不是在浪费空间吗?那为什么要调用
dbhelper.insertHighScore(score)内部
onCreate()
GameOver
活动。我很抱歉。我试图解决光标返回的问题。getCount始终为0,即使我使用默认值表示高分。我只是想确保初始值在我的数据库中。