2015-05-10 91 views
1

我开发了三项被称为活动A,活动B和活动C的活动。首先,活动A是我的主要活动,当应用程序启动时,活动A被创建。之后,我将移动到活动B startActivity(this,ActivityB.class),这里没有问题。问题是,当我想从活动B移动到活动C,并且我想从活动C获取数据时,但是有时我可以获取它并且有时我无法获取它并转移到活动AI会将我的代码片段放在问题上,我怎么能确定我可以一直提取数据?如何解决这个跳转到之前关于startActivityForResult和onActivityResult的活动?

从Activiy移动到活动B.

 Intent intent = new Intent(this,ActivityB.class); 
     intent.putExtra(User.USER_ID,id); 
     activity.startActivity(intent); 

从活动B移动到活动ç

Intent intent = new Intent(this,ActivityC.class); 
    startActivityForResult(intent, REQUEST_CODE); 

从活动Ç移动到活动乙与数据。

Intent returnIntent = new Intent(this,ActivityB.class); 
    Bundle bundle = new Bundle(); 
    bundle.putByteArray("data",data); 
    returnIntent.putExtras(bundle); 
    setResult(Activity.RESULT_OK,returnIntent); 
    finish(); 

在活动B,我处理未来数据为

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode,resultCode,data); 
    if(requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK){ 
     try { 
      Bundle bundle = data.getExtras(); 
      byte[] photo = bundle.getByteArray("data"); 
      setPhoto(photo); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

此代码的工作fine.However有时完成活动C,应用程序直接跳到活动A,我想以后以确保应用程序必须从活动C传递到活动B.

关于Activit y B生命周期:首先,所有的okey活动都会上升到onResume(),当startActivityForResult被调用时,它会保持onPause()。有时候,从Activity C回来后,我说,它可以正常工作,因为Activity B正在爬到onResume(),但是有时候没有任何生命周期日志消息,并且直接传递到Activity A而不会损坏到Activity B.

+0

你不需要Intent returnIntent = new Intent(this,ActivityB.class);意向returnIntent = new Intent()就够了... – Andrey

+0

@ ruan65谢谢评论,不过问题依然存在。 – user3751548

+0

我可以假设你setPhoto()方法抛出一个异常(有时如果照片过大或...无论什么),已处理的关闭B,所以A进入前... – Andrey

回答

0

As我明白了,你正试图从活动C中的数据进入活动B. 如果是这样,那么

protected void onActivityResult(int requestCode, int resultCode, Intent data) 

必须B.定义使用setResult(Activity.RESULT_OK,returnIntent);由C 将可返回
数据在B. NOT C.
的对于你为什么直接从C跳到A的问题,请确保你没有拨打finish()中的onActivityResult(..) B.

+0

对此深感抱歉,我编辑的问题,当然我把它定义为B。 – user3751548

相关问题