2014-09-22 2 views
1

Я столкнулся с такой жуткой ошибкой при реализации информации об общем доступе Facebook. Я сделал все этапы, как они описаны на Facebook учебник Facebook tutorial - share infoFacebook SDK: не было «открыто» состояние сеанса при создании WebDialog.FeedDialogBuilder

, но в то время как я пытался создать пример 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

+0

Спасибо @Alex Zezekalo. Спасла мою жизнь –

+0

О, боже мой, работаю идеально для меня. Спасибо @Alex Zezekalo. – sandeepmaaram

0

В дополнение к принятому ответу выше, если это первый пользовательский поток пользователей, пользователю необходимо войти в систему, чтобы создать сеанс. Для этого вам нужно добавить LoginActivity в ваш AndroidManifest.xml -

<activity 
     android:name="com.facebook.LoginActivity" 
     android:label="@string/title_activity_facebook_login" > 
    </activity> 
Смежные вопросы