Я использую следующий код, чтобы получить возможность отправлять на друг стену:Публикация на стене друзей с помощью Android FB SDK.
public void postFB(){
Bundle params = new Bundle();
params.putString("name", "An example parameter");
params.putString("link", "https://www.example.com/");
params.putString("to", "1481597430");
WebDialog feedDialog = (
new WebDialog.FeedDialogBuilder(getActivity(),
Session.getActiveSession(),
params))
.setOnCompleteListener(new OnCompleteListener(){
@Override
public void onComplete(Bundle values,
FacebookException error) {
System.out.println("Complete "+error +"Values "+values);
}})
.build();
feedDialog.show();
}
Сценария здесь является то, что я использую другой фрагмент для входа в Facebook, используя Thier LoginButton и я хочу отправить это сообщение в другом фрагмент. В то время как мое приложение требует, чтобы пользователь входил в FB только при первом запуске, означает ли это каждый раз, когда я хочу отправить сообщение на стену друзей, мне нужно будет сначала попросить пользователя зарегистрироваться?
Как и на втором прогоне при попытке разместить на стене друзей я получаю следующее сообщение об ошибке:
03-15 16:13:06.679: E/AndroidRuntime(8206): java.lang.NullPointerException: Argument 'session' cannot be null
03-15 16:13:06.679: E/AndroidRuntime(8206): at com.facebook.internal.Validate.notNull(Validate.java:29)
03-15 16:13:06.679: E/AndroidRuntime(8206): at com.facebook.widget.WebDialog$BuilderBase.<init>(WebDialog.java:461)
03-15 16:13:06.679: E/AndroidRuntime(8206): at com.facebook.widget.WebDialog$FeedDialogBuilder.<init>(WebDialog.java:626)
03-15 16:13:06.679: E/AndroidRuntime(8206): at com.exa.birthdayrem.Fragment1_3.postFB(Fragment1_3.java:73)
03-15 16:13:06.679: E/AndroidRuntime(8206): at com.exa.birthdayrem.Fragment1_3$1.onClick(Fragment1_3.java:255)
03-15 16:13:06.679: E/AndroidRuntime(8206): at android.view.View.performClick(View.java:4091)
03-15 16:13:06.679: E/AndroidRuntime(8206): at android.view.View$PerformClick.run(View.java:17072)
03-15 16:13:06.679: E/AndroidRuntime(8206): at android.os.Handler.handleCallback(Handler.java:615)
03-15 16:13:06.679: E/AndroidRuntime(8206): at android.os.Handler.dispatchMessage(Handler.java:92)
03-15 16:13:06.679: E/AndroidRuntime(8206): at android.os.Looper.loop(Looper.java:153)
03-15 16:13:06.679: E/AndroidRuntime(8206): at android.app.ActivityThread.main(ActivityThread.java:5000)
03-15 16:13:06.679: E/AndroidRuntime(8206): at java.lang.reflect.Method.invokeNative(Native Method)
03-15 16:13:06.679: E/AndroidRuntime(8206): at java.lang.reflect.Method.invoke(Method.java:511)
03-15 16:13:06.679: E/AndroidRuntime(8206): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
03-15 16:13:06.679: E/AndroidRuntime(8206): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
03-15 16:13:06.679: E/AndroidRuntime(8206): at dalvik.system.NativeStart.main(Native Method)
Для метода поста есть код мне/пост, где Repalce меня с друзьями идентификатором пользователя – OMAK
Вы можете уточнить? – User3
Нет, вы можете разместить это в любом фрагменте. Вы должны использовать парадигму «ActiveSession», которую дает SDK. Вы должны иметь возможность получать активный сеанс из любого фрагмента (поскольку он является статичным) и использовать его в конструкторе вашего веб-диалога. Во-вторых, вы можете инициировать (или открывать) сеанс из кэшированной информации (см. Метод Session.openActiveSessionFromCache). Если вы вызываете это в фрагменте запуска, он откроет активный сеанс без запроса пользователя или появления какого-либо пользовательского интерфейса. Наконец, вы должны всегда проверять, является ли активный сеанс нулевым, прежде чем использовать его. –