[英]OnActivityResult in Fragment does not called
我知道這個問題已經問過幾次了。 我已經嘗試了所有方法,但對我而言不起作用。
我正在嘗試從圖庫上傳圖像或通過意圖從相機捕獲圖像。 因此,實現是從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);
}
});
我該如何解決?
更新
我注意到,如果我已登錄Facebook,則不會發現該問題,因為它發現了活動會話。 否則,將發生錯誤。
我猜測Facebook會話會引發錯誤,因為不涉及任何會話。
請參閱下面的解決方案。
我注意到我沒有登錄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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.