繁体   English   中英

如何通过不同的活动访问相同的数据库?

[英]How do I access the same database from different activities?

我正在编写一个应用程序,我想存储高分。 我努力显示最终活动的高分。 但是,我希望有一个高分活动来显示所有高分。 我这样做是通过在highscores活动中,调用end活动返回高分,因此数据库不会发生变化。 运行调试后,我看到它到达了数据库处理程序,但是被getReadableDatabase()捕获,说它无法在空对象引用上调用该方法。

这是我的高分方法(我没有包括全部内容,而ifs是因为游戏存在不同的困难)

public class highscores extends Activity {
TextView mode, score;
Button right, back;
int modenum;
end get=new end();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_highscores);
    mode =(TextView)findViewById(R.id.scorebar);
    score =(TextView)findViewById(R.id.score);
    right =(Button)findViewById(R.id.button14);
    back =(Button)findViewById(R.id.highscores);
    mode.setText("Easy");
    score.setText(get.datatostring(1));
    modenum =1;
}
public void right(View view){
    if(modenum==1) {
        modenum = 2;
        mode.setText("Hard");
        score.setText(get.datatostring(2));
    }else if(modenum==2) {
        modenum = 3;
        mode.setText("X-Mode");
        score.setText(get.datatostring(3));
    }else {
        modenum = 1;
        mode.setText("Easy");
        score.setText(get.datatostring(1));
    }
}

这到底是方法

    public String datatostring(int difficulty){
    MyDBHandler db = new MyDBHandler(this, null,null,1);
    return db.datatostring(difficulty);
}

这是在数据库处理程序中

        public String datatostring(int difficulty){
        SQLiteDatabase db = getReadableDatabase();
        String dbString = "";
        String c;
        if(difficulty==1)
            c = COLUMN_SCORE;
        else if(difficulty==2)
            c = COLUMN_HARD;
        else
        c = COLUMN_X;
        String query = "SELECT "+c+" FROM "+TABLE_SCORES;

        Cursor cursor = db.rawQuery(query,null);
        cursor.moveToFirst();

        if(!cursor.isAfterLast()){
            int index = cursor.getColumnIndex(c);
            String value = cursor.getString(index);
            if(value!=null){
                dbString += cursor.getString(cursor.getColumnIndex(c));
            }
        }
        db.close();
        cursor.close();
        return dbString;
    }

我建议使用SQLiteOpenHelper来处理此问题。

您应该看到以下示例: Android Sqlite DB

希望能有所帮助,我本人就是以此方式工作的。

另一个选择是使用som ORM,我建议使用GreenDao ,它很好,并且可以轻松处理这种操作。

问候。

简短的答案是肯定的。

但是如您所见,您对连接没有明确的概念。

android中的BD是SQLite(推荐)始终在同一条路径上,您需要创建一个类来允许您管理和连接到数据库。 该类将是SQLiteOpenHelper

检查

您可以根据活动A,B或所需的活动将数据库连接一次或多次。

重要的是定义处理程序以连接,关闭,向数据库发出请求。

按照教程创建并发和可伸缩的数据库

请记住:

  1. 您应该始终通过数据库适配器的一个实例(Singleton)进行数据库查询,否则从不同的类同时访问数据库时,您将面临很多问题。

  2. 使用SQLiteOpenHelper类访问数据库。 因为它为您提供了许多有用的功能,例如。 在发布具有架构更改的应用程序更新时升级用户的数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM