将数据库类对象从主活动传递到另一个活动

时间:2016-07-26 23:12:04

标签: android sqlite

我正在尝试实现简单的数据库CRUD操作,在UPDATE操作的情况下,用户移动到另一个屏幕,在那里他输入他想要更新的列的新旧值,所以在移动到下一个活动时我想通过在MainActivity中为UpdateActivity创建的数据库类的对象,我通过实现Database类Serializbale尝试了它,但它崩溃了。

java.lang.RuntimeException: Parcelable encountered IOException reading a Serializable object

这是我试过的代码

MainActivity

MyDbHandler dbObj = new MyDBHandler(this, null, null, 1);

public void updateBtnClicked(View view)
{

    Intent intent = new Intent(MainActivity.this, ActivityUpdate.class);
    intent.putExtra("Object", dbObj);
    startActivity(intent);

}

ActivityUpdate

intent = getIntent();

dbObj2 = (MyDBHandler) intent.getSerializableExtra("Object");

public void doneButtonClicked(View view)
{

    String str1 = newValue.getText().toString();
    String str2 = oldValue.getText().toString();

    dbObj2.updateProduct(str1, str2);

    finish();

}

那么数据库类对象如何从一个活动传递到另一个活动呢?感谢

2 个答案:

答案 0 :(得分:3)

  

如何将数据库类对象从一个活动传递到另一个活动

您没有序列化数据库对象。你再次要求他们。

MyDbHandler dbHandler = new MyDbHandler(MainActivity.this);  // pass your Activity here 
dbHandler.update(new Foo(42));

其中MyDbHandlerSQLiteOpenHelper的某种扩展,如此编写

public class MyDbHandler extends SQLiteOpenHelper {
    // Database Info
    private static final String DATABASE_NAME = "DatabaseName";
    private static final int DATABASE_VERSION = 1;

    public MyDbHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion != newVersion) {
            // TODO
        }

    /**
     * Update method defined here
    **/
    public void update(Foo bar) {
        SQLiteDatabase db = getWritableDatabase();
        // TODO: Write to & close the database
    }
}

答案 1 :(得分:2)

MyDbHandler必须扩展Serializable才能正确序列化。