Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Android FB SDK发布到好友墙。_Android_Facebook_Facebook Android Sdk - Fatal编程技术网

使用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;
}