簡體   English   中英

Fragment中的OnActivityResult不被調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM