有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

未调用片段中的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) 个答案

  1. # 1 楼答案

    我注意到我没有登录到Facebook。这里的问题是Facebook正在尝试获取其活动会话,但在SharedReference中找不到它(我使用的是普通登录和社交登录)

    通过简单的变通办法解决了这个问题

    用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
        }
    }