2016-07-26 134 views
3

我试图实现简单的数据库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

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

你不要序列数据库对象。你再次要求他们。

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 
    } 
} 
+0

这意味着在每个Activity中我们都要执行一些数据库操作,我们已经创建了一个DB类的新对象并将当前Activity作为上下文传递给它?例如在我的情况下,你建议在MainActivity中创建数据库类的对象,这是我已经在做的事情,但是我想从另一个活动ActivityUpdate和第一行中提到的同一行代码执行更新任务,但是ActivityUpdate会执行在那里取代MainActivity? – shehzy

+0

正确,我只是举个例子。你只需要一个上下文 –

1

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

+1

cricket_007是正确的序列化是没有必要的数据库处理程序实例。按照他的建议在这种情况下。 –

+0

如果你觉得你不正确,你可以删除答案。这取决于你,虽然 –

+0

我觉得这个建议值得保留,因为shehzy发布的原始错误是一个序列化错误。无论在这种情况下是否需要修复序列化,都值得一提,以备将来参考。 –

相关问题