2017-10-06 102 views
0

我已將Facebook登錄添加到我的應用程序。Android Facebook登錄無法使用空調用程序包調用LoginFragment

第一次我能夠登錄沒有任何問題。但登錄後,然後我註銷。我在logcat中出現這個錯誤。

E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance. 

我在谷歌搜索了一下。通過將launchmode設置爲標準來解決一些錯誤。我沒有指定任何啓動模式。但我仍然試着用

<activity 
    android:name=".activities.LoginActivity" 
    android:launchMode="standard"/> 

但沒有成功。

這是我的程序登錄。

1加FB依賴compile 'com.facebook.android:facebook-android-sdk:[4,5)'

2我初始化FB SDK中Application類的onCreate()super.onCreate()後。 AppEventsLogger.activateApp(this);

3在我的登錄活動中創建CallbackManager實例onCreate()的活動。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    callbackManager = CallbackManager.Factory.create(); 
    setContentView(R.layout.activity_login); 
} 

4我用一個自定義按鈕來登錄。當我點擊fb登錄按鈕。我正在使用此代碼。

LoginManager.getInstance().registerCallback(callbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 

        GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), 
          new GraphRequest.GraphJSONObjectCallback() { 
           @Override 
           public void onCompleted(JSONObject object, GraphResponse response) { 
            //My Stuff Here 
           } 
          }); 
        Bundle parameters = new Bundle(); 

        parameters.putString("fields", "id,name,email,gender,first_name,last_name,link,picture.type(large)"); 
        request.setParameters(parameters); 
        request.executeAsync(); 
       } 

       @Override 
       public void onCancel() { 
        //Cancel Stuff 
       } 

       @Override 
       public void onError(FacebookException exception) { 
        exception.printStackTrace(); 
        //Error Stuff 
       } 
      });  LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context, 
      Arrays.asList("public_profile, email")); 

5我在onActivityResult()註冊回調

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

6和註銷我已經使用LoginManager.getInstance().logOut()

7,但我嘗試使用我的自定義按鈕,調試指針再次登錄去LoginManager.getInstance().registerCallback()行,但回調的方法(onSuccess(LoginResult loginResult),onError(),onError(FacebookException exception))都沒有得到調用。我得到一個日誌說E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance.

回答

1

改變了這一切

LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context, Arrays.asList("public_profile, email"));

LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, Arrays.asList("public_profile, email"));

+0

謝謝,你的回答幫我解決了這個問題。請參閱下面的答案。 –

+0

如果有幫助,請接受我的回答。 –

0

首先,Facebook正在這裏不給確切的異常細節。

Sushobh Nadiger的答案幫我解決了這個問題。

我想從我的LoginActivity中隔離Facebook登錄代碼並將JSONObject返回給LoginActivity,因此我創建了一個處理Social Login的類,名爲SocialLogin.java,並通過LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { //More Stuff here }在SocialLogin.java中註冊了該回調,並將login facebook LoginManager.getInstance().logInWithReadPermissions()有關更多詳細信息,請參閱相關代碼。

這是實際的問題。所以我在我的LoginActivity.java中調用了這些調用(registerCallback()和logInWithReadPermissions()),並且它工作正常。

但是我作爲開發人員會認爲像Facebook這樣的公司應該給我們適當的錯誤,而不是像我這樣的誤導性錯誤,這樣我們寶貴的時間不會被浪費。