2014-03-05 70 views
0

我知道這個問題已經被問過幾次了。我嘗試了所有這些,但在我的情況下不起作用。片段中的OnActivityResult不叫

我試圖從圖庫上傳圖片或通過意圖從相機捕獲。所以,實現是從Fragment調用onActivityResult。當單擊Fragment中的按鈕時,它將在MainActivity中返回NullPointerException

這裏的logcat的錯誤:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65538, result=0, data="imagepath"} to activity {com.example/com.example.activity.MainActivity}: java.lang.NullPointerException 

MainActivity

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // Null Pointer Exception here 
    Session.getActiveSession().onActivityResult(this, requestCode, 
      resultCode, data); 
} 

Session.getActiveSession()從Facebook來了,因爲我使用Facebook的SDK登錄。

如果我註釋掉這一行,相機/圖庫的意圖工作,但我不能使用Facebook SDK登錄按鈕。

UploadFragment

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode != getActivity().RESULT_OK) 
     return; 

    switch (requestCode) { 
     case CAMERA_REQUEST: 
     // 
     case SELECT_PICTURE: 
     // 
    } 
} 

片段的ActivitResult通過這家名爲:

btnCamera.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      try { 
       startActivityForResult(cameraIntent, CAMERA_REQUEST); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    btnGallery.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // To open up a gallery browser 
      startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE); 
     } 
    }); 

如何解決這個問題?


UPDATE

我注意到,如果我在給Facebook已經登錄,因爲它發現了一個活動的會話不出現問題。否則,會發生錯誤。

我猜Facebook會話拋出錯誤,因爲沒有涉及任何會話。

請參閱下面我的解決方案。

回答

0

我注意到我沒有登錄到Facebook。問題在於Facebook試圖獲得其活動會話,但無法在SharedPreference中找到它(我正在使用普通和社交登錄)。

通過簡單的解決方法來解決問題。

用try-catch塊包裝Session.getActiveSession。這將擺脫崩潰。

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 

    try { 
     Session.getActiveSession().onActivityResult(this, requestCode, 
       resultCode, data); 
    } catch (Exception e) { 
     // do nothing 
    } 
}