Android 使用putSerializable在活动上传递对象

Android 使用putSerializable在活动上传递对象,android,bundle,android-activity,Android,Bundle,Android Activity,我试图使用以下代码将我的dbhelper实例从一个活动传递到另一个活动 private void onCategoriesClick() { private DbAdapter db; db = new DbAdapter(this); Intent i = new Intent(this, CategoriesActivity.class); Bundle b = i.getExtras(); b.put

我试图使用以下代码将我的dbhelper实例从一个活动传递到另一个活动

    private void onCategoriesClick() {
        private DbAdapter db;
        db = new DbAdapter(this); 
        Intent i = new Intent(this, CategoriesActivity.class);
        Bundle b = i.getExtras();
        b.putSerializable("db", db); //geting NullPointerException here
        startActivityForResult(i, 0);    
DbAdapter类实现可序列化的

我很困惑,有人能指出我的错误吗

getExtras()返回null,因为在调用它之前,您没有将任何额外内容放入Intent中。这意味着b==null,因此是NPE。只需将可序列化文件直接放在intent中即可

i.putExtra("db", (Serializable) db);
不过,一般来说,如果可以的话,请避免将序列化文件传递给Intent。

getExtras()返回null,因为在调用Intent之前,您没有向Intent中添加任何额外内容。这意味着b==null,因此是NPE。只需将可序列化文件直接放在intent中即可

i.putExtra("db", (Serializable) db);

但是,一般来说,如果可以的话,请避免在意图上传递序列化文件。

在将使用它的活动中创建dbhelper。如果确实必须在活动之间传递它,那么将它存储在静态变量中(在应用程序类中以便于访问)会简单得多。

在将使用它的活动中创建dbhelper。如果您真的必须在活动之间传递它,那么将它存储在静态变量中(在您的应用程序类中以便于访问)会简单得多。

我不确定您为什么要做您想做的事情,但为了回答您的问题,新的
Intent
没有任何“extras”,因此
Bundle b=I.getExtras()
不会返回任何内容,即
b
null
。一个
意图
只有当你把它们放在那里时才有“额外的”。只需使用
i.putExtra(“db”,db)
。我不知道你为什么想做你想做的事,但为了回答你的问题,一个新的
意图
没有任何“附加”,所以
Bundle b=I.getExtras()
不会返回任何内容,即
b
null
。一个
意图
只有当你把它们放在那里时才有“额外的”。只需使用
i.putExtra(“db”,db)。我的错误是获取额外信息而不是额外信息,但这是这里的重要线索。为什么在每个活动中创建新的dbhelper比在它们之间传递相同的对象更好?另外,我喜欢你的应用程序Kuffs:)这不是一个固定的规则,但一般来说,活动对外部对象的依赖性越小,维护起来就越容易。设想一个数据库正在各种活动中传递。如果一个活动决定关闭数据库,其他活动可能会突然失败,因为它们希望数据库可用并连接。我的错误是获取额外数据而不是额外数据,但这是这里的重要线索。为什么在每个活动中创建新的dbhelper比在它们之间传递相同的对象更好?另外,我喜欢你的应用程序Kuffs:)这不是一个固定的规则,但一般来说,活动对外部对象的依赖性越小,维护起来就越容易。设想一个数据库正在各种活动中传递。如果一个活动决定关闭数据库,其他活动可能会突然失败,因为它们希望数据库可用并连接。