未调用片段中的java OnActivityResult
我知道这个问题以前被问过好几次。我都试过了,但对我来说不起作用
我正试图通过intents从画廊上传图像或从相机拍摄。因此,实现是从片段调用onActivityResult
。单击片段中的按钮时,它在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会话抛出了错误,因为没有涉及会话
请参阅下面我的解决方案
# 1 楼答案
我注意到我没有登录到Facebook。这里的问题是Facebook正在尝试获取其活动会话,但在SharedReference中找不到它(我使用的是普通登录和社交登录)
通过简单的变通办法解决了这个问题
用try-catch块包装
Session.getActiveSession
。这样就可以避免撞车了