使用.getSerializableExtra将对象从一个类转移到另一个类。

时间:2012-04-14 05:41:21

标签: android sqlite android-intent

我想将对象从一个活动转移到另一个活动。

在我的第一堂课中,我提出了以下内容

  

意图;

     

Intent intentttt.putExtra(" user_searchh",cur.toString());

这里cur是Cursor的对象。 我想将它转移到第二堂课。

在我的第二节课中,我已经放下了

  

光标c =(光标)getIntent()。getSerializableExtra(" user_searchh");

我试图在没有上述代码的情况下运行这两个类,它可以正常工作。

但是,当我放置上面的代码时,它会提示强制关闭错误。

在DDMS中有错误,如... NulpointerException ... DirectCursorDriver ....等..

我从teke参考 How to pass an object from one activity to another on Android

有50票。

如果可能,请帮助我。

谢谢......

5 个答案:

答案 0 :(得分:1)

我明白了......

首先,当您将对象转换为字符串时...您永远不能将其转换回对象..

其次,而不是将对象从一个Activity转移到另一个Activity,最好将字符串从一个Activity转移到第二个activity ...然后在第二个活动中计算东西......

将字符串从一个Activity转移到另一个Activity时我犯了两个错误......

1)我犯的第一个错误是......

我使用两个意图对象..   e.g。

  

Intent i = new Intent(user_search2.this,rest_name_share.class);

     Intent i1= new Intent();
    i1.putExtra("restaurant_email", email_of_restaurant);

     startActivity(i); 
             startActivity(i1);

而你应该写如下

  

Intent i = new Intent(user_search2.this,rest_name_share.class);

    i.putExtra("restaurant_email", email_of_restaurant);  // here email_of_restaurant is a String object ..
    // you can aslo put more  than one strings...
     startActivity(i); 

2)第二个错误是我在类级调用getStringExtra()。

应该在onCreate()方法中调用它

onCreate()中要调用的东西是

  

Intent intent = getIntent();

     

String email_of_restaurant = intent.getStringExtra(“restaurant_detail”);

感谢所有人,......

答案 1 :(得分:0)

这不是Serializable如何工作的,你是对的,在一个基本层面上,对象被转换为一个String,但它比调用obj.toString()更复杂;

您可以通过Intent传递的唯一对象是实现Serializable interface的对象。

因此,如果Cursor中存在需要传递的信息,请将其取出并将其包装在某种Serializable对象中。

答案 2 :(得分:0)

OMG。这是一个问题的一个小灾难区域,嗯?

OP的问题很简单:他将String放入Intent然后尝试检索Serializable。 String当然是Serializable,但是对Cursor的强制转换不起作用。

如果有人试图提供帮助,而不是仅仅是正确的,那么可以指出,一般情况下,这不会起作用。尝试包裹或序列化游标 - 一个表示与数据库连接的对象 - 几乎不可能。暂时考虑将整个游标数据编组到一个意图中意味着什么。但是后来,我确实说“除了”,因为实际上,使用某种Binder魔法,Android 确实支持跨进程游标(我包括链接,但是SO禁止它)。但是,不,你不能把Cursor放入Intent。完全没有。如初。

最后,虽然,大约3个答案前,有人应该已经停止了疯狂,并问,“WTF,伙计???你想做什么??”以下是一些实现OP尝试的方法:

  • 将您需要的数据拖入模型对象树并将引用传递给它
  • 重新运行查询(以上建议,但没有支持理由)
  • 将光标置于全局中,并从两个活动中引用它。

答案 3 :(得分:-1)

您已将String Object放入此代码

所以尝试下面的代码就可以了。

  Intent intentttt.putExtra("user_searchh", cur.toString()); 

 String str=getIntent().getStringExtra("user_searchh");

for Pass Cursor你需要像这样做一些类,如下所示。

public class MyCursor implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;
Cursor mCursor;

public void setCursor(Cursor paramCursor){
    mCursor=paramCursor;
}

public Cursor getCursor(){
    return this.mCursor;
  }
}

现在在将Object放入PutExtra之前,用下面的代码初始化它

   MyCursor mObject=new MyCursor();
    //You can set your Cursor in Below code
   mObject.setCursor(mCursor);
   mIntent.putExtra("mCursor",mObject );

现在在其他Activity中,您可以通过以下代码获取Cursor。

   MyCursor mGetCursor;
  mGetCursor=(MyCursor) getIntent().getSerializableExtra("mCursor");
    if(mGetCursor!=null){
        mGetCursor.getCursor();
    }

答案 4 :(得分:-1)

//For passing :
intent.putExtra("MyKey", YourObj);  // From First Activity

// to retrieve object in second Activity
Object obj = getIntent().getSerializableExtra("MyKey"); //In Second Activity

现在您可以转换对象了。 希望这有助于你。

相关问题