2015-05-10 50 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

相關問題