Fragment中的OnActivityResult未调用

时间:2014-03-05 04:57:41

标签: java android android-fragments

我知道此问题曾被问过几次。我已经尝试了所有这些但是在我的情况下不起作用。

我正在尝试从图库上传图像或通过意图从相机捕获。因此,实现是从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 Session会抛出错误,因为没有涉及会话。

请参阅下面的解决方案。

1 个答案:

答案 0 :(得分: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
    }
}