我正在尝试在 android 的 sql lite 数据库中更新播放器的分数,但它没有发生

Posted

技术标签:

【中文标题】我正在尝试在 android 的 sql lite 数据库中更新播放器的分数,但它没有发生【英文标题】:I am trying to update score of the player in sql lite database in android but its not happening 【发布时间】:2021-09-21 04:14:23 【问题描述】:

这是 DBHelper 类中的更新函数,每次正确答案后将分数更新 10。我的插入功能工作正常,但是当更新功能触发应用程序正在更改其活动并且分数没有得到更新时

public Boolean updateScore(String username,Integer score)

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("username", username);
    contentValues.put("score", score);
    long result = db.update( "scores",contentValues, username + " = ?", new String[] 
username);
    if (result==-1) return false;
    else return true;

这是我在检查按钮后面的代码。它检查单词是否正确,然后分数增加 10。插入功能工作正常。

        check.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            player.start();

            if (answer.getText().toString().isEmpty())
                Toast.makeText(easy_level.this,"Enter you guess first", 
Toast.LENGTH_SHORT).show();
            
            else if (answer.getText().toString().equalsIgnoreCase(pet))
                Toast.makeText(easy_level.this,"You are correct", Toast.LENGTH_SHORT).show();

                answer.setText("");
                pet = pets[random.nextInt(pets.length)];
                question.setText(mixWords(pet));
                count.start();

                //insertingScore
                if(score_int == 0)
                    Boolean insert = DB.insertScore(name,10);
                    score_int +=10;
                    score.setText(String.valueOf(score_int));
                    if (insert==true)
                    
                        Toast.makeText(easy_level.this,"added 10",Toast.LENGTH_SHORT).show();

                    else
                    
                        Toast.makeText(easy_level.this,"failed",Toast.LENGTH_SHORT).show();
                    

                else 
                        score_int +=10;
                        score.setText(String.valueOf(score_int));
                        Boolean update = DB.updateScore(name,score_int);

                        if (update==true)
                        
                            Toast.makeText(easy_level.this,"updated 
10",Toast.LENGTH_SHORT).show();

                        else
                        
                            Toast.makeText(easy_level.this,"update 
fail",Toast.LENGTH_SHORT).show();
                        
                



            else 
                Toast.makeText(easy_level.this,"You are wrong", Toast.LENGTH_SHORT).show();
            
        
    );

【问题讨论】:

【参考方案1】:

在您的 db.update() 中,您引用的是值而不是列名

 long result = db.update( "scores",contentValues, username + " = ?", new String[] 
username);

应该是

 long result = db.update( "scores",contentValues, "username = ?", new String[] 
username);

【讨论】:

感谢您解决我的问题

以上是关于我正在尝试在 android 的 sql lite 数据库中更新播放器的分数,但它没有发生的主要内容,如果未能解决你的问题,请参考以下文章

SQL Lite和mysql是否一样

如何使用 SQL-lite 数据库检索到 android studio 中的单选按钮组

Android Tensorflow Lite C++ .SO 库未在运行时链接

将图像存储在 android 中的 SD 卡或 SQL lite DB 中的最佳做法是啥?

Android NDK undefined引用google protobuf

如何在基于 tensorflow lite 对象检测 android 的应用程序中添加文本转语音?