2014-09-22 71 views
1

我在實現Facebook共享信息時遇到了這樣一個奇怪的錯誤。 我所做的所有階段,因爲他們在Facebook上的教程Facebook tutorial - share infoFacebook SDK:在創建WebDialog.FeedDialogBu​​ilder時沒有「打開」會話狀態

描述,但是當我試圖創建實例WebDialog.feedDialog

private void publishFeedDialog() { 
 
     Bundle params = new Bundle(); 
 
     params.putString("name", getString(R.string.name_fb)); 
 
     params.putString("description", getString(R.string.description_fb)); 
 
     params.putString("link", getString(R.string.share_link_fb)); 
 
     params.putString("picture", getString(R.string.pictute_url_fb)); 
 
     
 
     Session session = Session.getActiveSession(); 
 
     
 
     Log.i(TAG, "session = " + session + " isOpen = " + session.isOpened() + " isClosed = " + session.isClosed()); 
 
     
 
     WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(this, Session.getActiveSession(), params)) 
 
     \t \t .setOnCompleteListener(new OnCompleteListener() { 
 

 
       @Override 
 
       public void onComplete(Bundle values, FacebookException error) { 
 
        if (error == null) { 
 
        \t 
 
         // When the story is posted, echo the success and the post Id. 
 
         final String postId = values.getString("post_id"); 
 
         
 
         if (postId != null) { 
 
          Toast.makeText(MainActivity.this, "Posted story, id: " + postId, 
 
           Toast.LENGTH_SHORT).show(); 
 
         } else { 
 
          // User clicked the Cancel button 
 
          Toast.makeText(MainActivity.this, "Publish cancelled", 
 
           Toast.LENGTH_SHORT).show(); 
 
         } 
 
         
 
        } else if (error instanceof FacebookOperationCanceledException) { 
 
         // User clicked the "x" button 
 
         Toast.makeText(MainActivity.this, "Publish cancelled", Toast.LENGTH_SHORT).show(); 
 
         
 
        } else { 
 
         // Generic, ex: network error 
 
         Toast.makeText(MainActivity.this, "Error posting story", Toast.LENGTH_SHORT).show(); 
 
        } 
 
       } 
 

 
      }).build(); 
 
     
 
     feedDialog.show(); 
 
    }

我抓住FacebookException

09-22 19:34:49.325: E/ActivityThread(12202): Failed to find provider info for com.facebook.katana.provider.PlatformProvider 
 
09-22 19:34:49.325: I/MainActivity(12202): session = {Session state:CREATED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:1111111111111} isOpen = false isClosed = false 
 
09-22 19:34:49.325: D/AndroidRuntime(12202): Shutting down VM 
 
09-22 19:34:49.325: W/dalvikvm(12202): threadid=1: thread exiting with uncaught exception (group=0x418cc700) 
 
09-22 19:34:49.325: E/ActivityThread(12202): Failed to find provider info for com.facebook.wakizashi.provider.PlatformProvider 
 
09-22 19:34:49.405: D/dalvikvm(12202): GC_FOR_ALLOC freed 891K, 9% free 10493K/11452K, paused 21ms, total 21ms 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): FATAL EXCEPTION: main 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): java.lang.IllegalStateException: Could not execute method of the activity 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at android.view.View$1.onClick(View.java:3633) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at android.view.View.performClick(View.java:4240) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at android.view.View$PerformClick.run(View.java:17721) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at android.os.Handler.handleCallback(Handler.java:730) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at android.os.Handler.dispatchMessage(Handler.java:92) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at android.os.Looper.loop(Looper.java:137) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at android.app.ActivityThread.main(ActivityThread.java:5103) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at java.lang.reflect.Method.invokeNative(Native Method) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at java.lang.reflect.Method.invoke(Method.java:525) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at dalvik.system.NativeStart.main(Native Method) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): Caused by: java.lang.reflect.InvocationTargetException 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at java.lang.reflect.Method.invokeNative(Native Method) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at java.lang.reflect.Method.invoke(Method.java:525) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at android.view.View$1.onClick(View.java:3628) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t ... 11 more 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): Caused by: com.facebook.FacebookException: Attempted to use a Session that was not open. 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at com.facebook.widget.WebDialog$BuilderBase.<init>(WebDialog.java:485) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at com.facebook.widget.WebDialog$FeedDialogBuilder.<init>(WebDialog.java:669) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at com.kaeriasarl.psslite.activities.MainActivity.publishFeedDialog(MainActivity.java:131) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at com.kaeriasarl.psslite.activities.MainActivity.shareLinkToFacebook(MainActivity.java:116) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t at com.kaeriasarl.psslite.activities.MainActivity.onClickFeature(MainActivity.java:99) 
 
09-22 19:34:52.365: E/AndroidRuntime(12202): \t ... 14 more 
 
09-22 19:34:52.475: I/GAV3(12202): Thread[GAThread,5,main]: No campaign data found.

,我可以從日誌中的主要麻煩明白的是Session.getActiveSession(那結果)不能爲空,應打開,但我看到會議有狀態只有創建! 但是我做了Facebook教程所說的所有階段!請幫助!

回答

7

調查後,我解決我的問題:

1)創建feedDialog之前,我應該檢查是否活動會話被打開,如果沒有的話,我應該直接打開活動會話

\t if (Session.getActiveSession() == null || !Session.getActiveSession().isOpened()) { 
 
     Session.openActiveSession(MainActivity.this, true, callback); 
 
    } else { 
 
     publishFeedDialog(); 
 
    }

2)調用publishFeedDialog()在Session.StatusCallback

private Session.StatusCallback callback = new Session.StatusCallback() { 
 
\t \t 
 
\t \t @Override 
 
\t \t public void call(Session session, SessionState state, Exception exception) { 
 
\t \t \t 
 
\t \t \t if (state.isOpened() && isFbShare) { 
 
\t \t \t \t publishFeedDialog(); 
 
\t \t \t } 
 
\t \t } 
 
\t };

+0

謝謝。這節省了我的時間。從手機中卸載FB應用後,我開始出現這個問題。 – Narek 2014-10-15 14:32:51

+0

謝謝@Alex Zezekalo。拯救了我的生命 – 2015-01-09 05:48:11

+0

哦,我的上帝,爲我完美工作。謝謝@Alex Zezekalo。 – sandeepmaaram 2015-02-16 11:48:57

0

除了上面接受的答案外,如果這是第一次用戶體驗流,用戶需要登錄才能創建會話。爲了做到這一點,您需要將LoginActivity添加到您的AndroidManifest.xml中 -

<activity 
     android:name="com.facebook.LoginActivity" 
     android:label="@string/title_activity_facebook_login" > 
    </activity>