0

我的第一个 Android 应用程序有问题。

我在主要活动中创建了 SQLiteDatabase。

   private SQLiteDatabase db = null;


    public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               db = (new DatabaseHelper(this)).getWritableDatabase();
    }
    //DatabaseHelper only creates Table and puts some initial values

但我想从我的另一个活动中访问这个数据库。(添加项目活动)。

我不知道如何做到这一点,以及是否可能。

谢谢您的回答.. :)

4

3 回答 3

1

一种选择可能是让您的自定义类实现 Serializable 接口,然后您可以使用 Intent#putExtra() 方法的 putExtra(Serializable..) 变体以额外的意图传递对象实例。

伪代码:

//传递:intent.putExtra("dbtag", db);

// 在第二个 Activity 中检索对象 getIntent().getSerializableExtra("dbtag");

于 2013-06-08T20:45:14.673 回答
0

在 main_activity 中创建的 MySQL 数据库也可以从其他活动中访问。只需使用

// SQLiteDatabase db_name = db_name.getWritableDatabase();

在其他活动中,您可以使用它。

之后不要忘记关闭它

于 2013-06-08T20:49:18.293 回答
0
db = (new DatabaseHelper(this)).getWritableDatabase();

是一个很大的错误 - 你正在创建一个匿名助手,而你需要完全相反 - 珍惜这个实例并在任何地方使用它。可写数据库是在您的应用程序生命周期内多次创建和处置的东西。

您需要将助手保持为单例。
您可以使用我编写的这段代码供自己使用。把它放在你的助手类中。

助手是懒惰地创建的——不一定在 onCreate() 中。
您可以从任何活动和任何线程中使用它(它是线程安全的)。

    private static DbHelperAndroid mInstance = null;

public static DbHelperAndroid getDb(Context ctx) {
    if (mInstance == null) {
        synchronized (TAG) { // any final static object will do
            // checking again inside the sync block, since it's a critical section.
            // I'm not doing this in the above if because it's really rare
            // and I don't want the overhead of locks all the time
            if (mInstance == null) {
                mInstance = new DbHelperAndroid(
                        ctx.getApplicationContext(), true);
            }
        }

    }
    return mInstance;
}
于 2013-06-08T20:59:48.620 回答