使用Android FB SDK发布到好友墙。
我正在使用以下代码在朋友墙上发布:使用Android FB SDK发布到好友墙。,android,facebook,facebook-android-sdk,Android,Facebook,Facebook Android 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");
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 login按钮,我想用另一个片段发布这条消息。虽然我的应用程序要求用户只在第一次运行时登录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)
03-15 16:13:06.679:E/AndroidRuntime(8206):java.lang.NullPointerException:参数“session”不能为null
03-15 16:13:06.679:E/AndroidRuntime(8206):在com.facebook.internal.Validate.notNull(Validate.java:29)
03-15 16:13:06.679:E/AndroidRuntime(8206):位于com.facebook.widget.WebDialog$BuilderBase。(WebDialog.java:461)
03-15 16:13:06.679:E/AndroidRuntime(8206):位于com.facebook.widget.WebDialog$FeedDialogBuilder。(WebDialog.java:626)
03-15 16:13:06.679:E/AndroidRuntime(8206):在com.exa.birthdayrem.Fragment1_3.postFB(Fragment1_3.java:73)
03-15 16:13:06.679:E/AndroidRuntime(8206):在com.exa.birthdayrem.Fragment1\u 3$1.onClick(Fragment1\u 3.java:255)
03-15 16:13:06.679:E/AndroidRuntime(8206):在android.view.view.performClick(view.java:4091)上
03-15 16:13:06.679:E/AndroidRuntime(8206):在android.view.view$PerformClick.run(view.java:17072)
03-15 16:13:06.679:E/AndroidRuntime(8206):在android.os.Handler.handleCallback(Handler.java:615)上
03-15 16:13:06.679:E/AndroidRuntime(8206):在android.os.Handler.dispatchMessage(Handler.java:92)上
03-15 16:13:06.679:E/AndroidRuntime(8206):在android.os.Looper.loop(Looper.java:153)上
03-15 16:13:06.679:E/AndroidRuntime(8206):在android.app.ActivityThread.main(ActivityThread.java:5000)上
03-15 16:13:06.679:E/AndroidRuntime(8206):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-15 16:13:06.679:E/AndroidRuntime(8206):位于java.lang.reflect.Method.invoke(Method.java:511)
03-15 16:13:06.679:E/AndroidRuntime(8206):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
03-15 16:13:06.679:E/AndroidRuntime(8206):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
03-15 16:13:06.679:E/AndroidRuntime(8206):在dalvik.system.NativeStart.main(本机方法)
看看在哪里可以找到关于如何使用Android FB SDK共享对话框的说明
您还可以在这里找到一些示例代码:private void publishStory(){
最终会话=Session.getActiveSession();
if(会话!=null){
List permissions=session.getPermissions();
如果(!isSubsetOf(权限、权限)){
if(shareDialog.isShowing()){
shareDialog.disclose();
}
final AlertDialog.Builder alert=新建AlertDialog.Builder(此);
setMessage(“请通过登录授予权限”);
alert.setPositiveButton(“登录”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
pendingPublishReauthorization=真;
Session.newpermissions请求newpermissions请求=新会话
.newpermissions请求(FacebookShareActivity.this,PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
}
});
alert.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
完成();
返回;
}
});
final AlertDialog AlertDialog=alert.create();
alertDialog.show();
alertDialog.setOnKeyListener(新的DialogInterface.OnKeyListener(){
@凌驾
公共布尔onKey(对话框接口对话框,int-keyCode,
关键事件(事件){
如果(keyCode==KeyEvent.keyCode_BACK&&
event.getAction()==KeyEvent.ACTION\u UP&&
!event.isCanceled()){
alertDialog.cancel();
完成();
返回true;
}
返回false;
}
});
返回;
}
if(shareDialog.isShowing()){
shareDialog.setMessage(“共享”);
}否则{
试一试{
shareDialog=ProgressDialog.show(
这",,
“分享…”,没错);
}捕获(例外e){
e、 printStackTrace();
}
}
Bundle postParams=新Bundle();
postParams.putString(“名称”,shareMsg);
putString(“标题”,shareCaption);
postParams.putString(“描述”,shareDescription);
postParams.putString(“链接”,shareLink);
postParams.putString(“图片”,sharePicture);
Request.Callback=new Request.Callback(){
未完成公共无效(响应){
FacebookRequestError=response.getError();
if(错误!=null){
如果(shareDialog.isShowing()){
shareDialog.disclose();
}
showAlert(“,error.getErrorMessage());
}否则{
if(shareDialog.isShowing()){
shareDialog.disclose();
}
showAlert(“在Facebook上共享”);
}
}
};
请求=新请求(会话,“1481597430/feed”,后参数,
HttpMethod.POST,回调);
private void publishStory() {
final Session session = Session.getActiveSession();
if (session != null){
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
if(shareDialog.isShowing()){
shareDialog.dismiss();
}
final AlertDialog.Builder alert=new AlertDialog.Builder(this);
alert.setMessage("please give permission by log in.");
alert.setPositiveButton("Login", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(FacebookShareActivity.this, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
finish();
return;
}
});
final AlertDialog alertDialog=alert.create();
alertDialog.show();
alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK &&
event.getAction() == KeyEvent.ACTION_UP &&
!event.isCanceled()) {
alertDialog.cancel();
finish();
return true;
}
return false;
}
});
return;
}
if(shareDialog.isShowing()){
shareDialog.setMessage("Sharing");
}else{
try {
shareDialog = ProgressDialog.show(
this, "",
"Sharing..", true);
} catch (Exception e) {
e.printStackTrace();
}
}
Bundle postParams = new Bundle();
postParams.putString("name", shareMsg);
postParams.putString("caption", shareCaption);
postParams.putString("description", shareDescription);
postParams.putString("link", shareLink);
postParams.putString("picture", sharePicture);
Request.Callback callback= new Request.Callback() {
public void onCompleted(Response response) {
FacebookRequestError error = response.getError();
if (error != null) {
if(shareDialog.isShowing()){
shareDialog.dismiss();
}
showAlert("", error.getErrorMessage());
} else {
if(shareDialog.isShowing()){
shareDialog.dismiss();
}
showAlert("", "Shared on Facebook");
}
}
};
Request request = new Request(session, "1481597430/feed", postParams,
HttpMethod.POST, callback);
RequestAsyncTask task = new RequestAsyncTask(request);
task.execute();
}
else {
if(shareDialog.isShowing()){
shareDialog.dismiss();
}
}
}
/**
* Checking Permissions for Facebook sharing
*
*/
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
for (String string : subset) {
if (!superset.contains(string)) {
return false;
}
}
return true;
}