Android Facebook sdk 3.0.1工作不正常

Android Facebook sdk 3.0.1工作不正常,android,facebook,facebook-android-sdk,Android,Facebook,Facebook Android Sdk,我正在尝试使用Facebook sdk登录Facebook。但它没有登录。它正在打开对话框,但在获得凭据后它不工作。如果我安装Facebook应用程序,它会打开Facebook应用程序,但登录未完成,我无法获取令牌和用户id。我也不能把留言贴到墙上。但它会显示“消息成功显示”的祝酒词,但不会张贴在Facebook的墙上。 代码: 请告诉我哪里出了问题。显示toast后,应用程序将关闭。加载fb对话框时,如果我触摸屏幕,它会重新加载或切换回应用程序窗口。 请立即回复这并不是你问题的确切答案,但如果

我正在尝试使用Facebook sdk登录Facebook。但它没有登录。它正在打开对话框,但在获得凭据后它不工作。如果我安装Facebook应用程序,它会打开Facebook应用程序,但登录未完成,我无法获取令牌和用户id。我也不能把留言贴到墙上。但它会显示“消息成功显示”的祝酒词,但不会张贴在Facebook的墙上。 代码:

请告诉我哪里出了问题。显示toast后,应用程序将关闭。加载fb对话框时,如果我触摸屏幕,它会重新加载或切换回应用程序窗口。
请立即回复

这并不是你问题的确切答案,但如果你开始开发你的应用程序:3.x API中不推荐使用
Facebook
对象。
在新的API中,您应该使用
会话
对象,以及
UiLifecycleHelper
这并不完全是您问题的答案,但如果您开始开发应用程序:3.x API中不推荐使用
Facebook
对象。
在新的API中,您应该使用
Session
对象以及
UiLifecycleHelper
Facebook对象被折旧。您可以在活动oncreate()方法中使用以下代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



    requestWindowFeature(Window.FEATURE_NO_TITLE);

//  setContentView(R.layout.facebook_dialog);
    Session.openActiveSession(this, true, new Session.StatusCallback() {

        // callback when session changes state
        @Override
        public void call(Session session, SessionState state, Exception      exception) {
            if (session.isOpened()) {
                // make request to the /me API
                Request.executeMeRequestAsync(session, new   Request.GraphUserCallback() {

                    // callback after Graph API response with user object
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user == null) {



         Toast.makeText(LoginFacebook.this.getApplicationContext(), 
                                    "Facebook Error",

Toast.LENGTH_LONG).show();

 finish();
                        }
                        else
                        {

         Toast.makeText(LoginFacebook.this.getApplicationContext(), 
                                    user.getName()+" Logged in Successfully.",
                                    T    
   Toast.LENGTH_LONG).show();
                            finish();
                        }
                        //login_fb.setEnabled(true);
                        //progress.setVisibility(View.INVISIBLE);
                    }

                });


            }
        }
    });


}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
  finish();
}
并在应用程序标记下的Manifest.xml文件中使用以下代码

    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id" />

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

登录发布到墙后,您必须调用此方法

       private void publishStory(String user) {
    try {
        Session session = Session.getActiveSession();

        if (session != null){

            // Check for publish permissions    
            List<String> permissions = session.getPermissions();
            if (!isSubsetOf(PERMISSIONS, permissions)) {
                pendingPublishReauthorization = true;
                Session.NewPermissionsRequest newPermissionsRequest = new Session
                        .NewPermissionsRequest(this, PERMISSIONS);
                session.requestNewPublishPermissions(newPermissionsRequest);
                return;
            }

            Bundle postParams = new Bundle();
            postParams.putString("message", messageToPost);

            Request.Callback callback= new Request.Callback() {
                public void onCompleted(Response response) {
                    JSONObject graphResponse = response
                            .getGraphObject()
                            .getInnerJSONObject();
                    String postId = null;
                    try {
                        postId = graphResponse.getString("id");
                    } catch (Exception e) {
                        Log.i("Test",
                                "JSON error "+ e.getMessage());
                    }
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        Toast.makeText(ShareOnFacebook.this
                                .getApplicationContext(),
                                error.getErrorMessage(),
                                Toast.LENGTH_SHORT).show();
                    } else {

                        progress.setVisibility(View.INVISIBLE);
                        toastmessage="Posted Successfully";
                        Toast.makeText(ShareOnFacebook.this
                                .getApplicationContext(),
                                toastmessage,
                                Toast.LENGTH_SHORT).show();

                    }
                }
            };

            Request request = new Request(session, user+"/feed", postParams, 
                    HttpMethod.POST, callback);

            RequestAsyncTask task = new RequestAsyncTask(request);
            task.execute();
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Toast.makeText(ShareOnFacebook.this
                .getApplicationContext(),
                "Facebook Error",
                Toast.LENGTH_SHORT).show();
    }

}
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
    for (String string : subset) {
        if (!superset.contains(string)) {
            return false;
        }
    }
    return true;
}
private void publishStory(字符串用户){
试一试{
Session=Session.getActiveSession();
if(会话!=null){
//检查发布权限
List permissions=session.getPermissions();
如果(!isSubsetOf(权限、权限)){
pendingPublishReauthorization=真;
Session.newpermissions请求newpermissions请求=新会话
.NewPermissionsRequest(此,权限);
session.requestNewPublishPermissions(newPermissionsRequest);
返回;
}
Bundle postParams=新Bundle();
putString(“message”,messageToPost);
Request.Callback=new Request.Callback(){
未完成公共无效(响应){
JSONObject graphResponse=响应
.getGraphObject()
.getInnerJSONObject();
字符串postId=null;
试一试{
postId=graphResponse.getString(“id”);
}捕获(例外e){
Log.i(“测试”,
“JSON错误”+e.getMessage());
}
FacebookRequestError=response.getError();
if(错误!=null){
Toast.makeText(ShareOnFacebook.this)
.getApplicationContext(),
错误。getErrorMessage(),
吐司。长度(短)。show();
}否则{
progress.setVisibility(View.INVISIBLE);
toastmessage=“已成功发布”;
Toast.makeText(ShareOnFacebook.this)
.getApplicationContext(),
演讲信息,
吐司。长度(短)。show();
}
}
};
请求=新请求(会话,用户+“/feed”,后参数,
HttpMethod.POST,回调);
RequestAsyncTask任务=新的RequestAsyncTask(请求);
task.execute();
}
}捕获(例外e){
//TODO自动生成的捕捉块
Toast.makeText(ShareOnFacebook.this)
.getApplicationContext(),
“Facebook错误”,
吐司。长度(短)。show();
}
}
私有布尔isSubsetOf(集合子集、集合超集){
for(字符串:子集){
如果(!superset.contains(string)){
返回false;
}
}
返回true;
}
将变量声明为

private static final List<String> PERMISSIONS =    Arrays.asList("publish_actions","manage_pages","publish_stream");
private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization";
private boolean pendingPublishReauthorization = false;
private static final List PERMISSIONS=Arrays.asList(“发布操作”、“管理页面”、“发布流”);
私有静态最终字符串挂起\u PUBLISH\u KEY=“pendingPublishReauthorization”;
私有布尔pendingPublishReauthorization=false;

Facebook对象已折旧。您可以在活动中使用以下代码oncreate()方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



    requestWindowFeature(Window.FEATURE_NO_TITLE);

//  setContentView(R.layout.facebook_dialog);
    Session.openActiveSession(this, true, new Session.StatusCallback() {

        // callback when session changes state
        @Override
        public void call(Session session, SessionState state, Exception      exception) {
            if (session.isOpened()) {
                // make request to the /me API
                Request.executeMeRequestAsync(session, new   Request.GraphUserCallback() {

                    // callback after Graph API response with user object
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user == null) {



         Toast.makeText(LoginFacebook.this.getApplicationContext(), 
                                    "Facebook Error",

Toast.LENGTH_LONG).show();

 finish();
                        }
                        else
                        {

         Toast.makeText(LoginFacebook.this.getApplicationContext(), 
                                    user.getName()+" Logged in Successfully.",
                                    T    
   Toast.LENGTH_LONG).show();
                            finish();
                        }
                        //login_fb.setEnabled(true);
                        //progress.setVisibility(View.INVISIBLE);
                    }

                });


            }
        }
    });


}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
  finish();
}
并在应用程序标记下的Manifest.xml文件中使用以下代码

    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id" />

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

登录发布到墙后,您必须调用此方法

       private void publishStory(String user) {
    try {
        Session session = Session.getActiveSession();

        if (session != null){

            // Check for publish permissions    
            List<String> permissions = session.getPermissions();
            if (!isSubsetOf(PERMISSIONS, permissions)) {
                pendingPublishReauthorization = true;
                Session.NewPermissionsRequest newPermissionsRequest = new Session
                        .NewPermissionsRequest(this, PERMISSIONS);
                session.requestNewPublishPermissions(newPermissionsRequest);
                return;
            }

            Bundle postParams = new Bundle();
            postParams.putString("message", messageToPost);

            Request.Callback callback= new Request.Callback() {
                public void onCompleted(Response response) {
                    JSONObject graphResponse = response
                            .getGraphObject()
                            .getInnerJSONObject();
                    String postId = null;
                    try {
                        postId = graphResponse.getString("id");
                    } catch (Exception e) {
                        Log.i("Test",
                                "JSON error "+ e.getMessage());
                    }
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        Toast.makeText(ShareOnFacebook.this
                                .getApplicationContext(),
                                error.getErrorMessage(),
                                Toast.LENGTH_SHORT).show();
                    } else {

                        progress.setVisibility(View.INVISIBLE);
                        toastmessage="Posted Successfully";
                        Toast.makeText(ShareOnFacebook.this
                                .getApplicationContext(),
                                toastmessage,
                                Toast.LENGTH_SHORT).show();

                    }
                }
            };

            Request request = new Request(session, user+"/feed", postParams, 
                    HttpMethod.POST, callback);

            RequestAsyncTask task = new RequestAsyncTask(request);
            task.execute();
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Toast.makeText(ShareOnFacebook.this
                .getApplicationContext(),
                "Facebook Error",
                Toast.LENGTH_SHORT).show();
    }

}
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
    for (String string : subset) {
        if (!superset.contains(string)) {
            return false;
        }
    }
    return true;
}
private void publishStory(字符串用户){
试一试{
Session=Session.getActiveSession();
if(会话!=null){
//检查发布权限
List permissions=session.getPermissions();
如果(!isSubsetOf(权限、权限)){
pendingPublishReauthorization=真;
Session.newpermissions请求newpermissions请求=新会话
.NewPermissionsRequest(此,权限);
session.requestNewPublishPermissions(newPermissionsRequest);
返回;
}
Bundle postParams=新Bundle();
putString(“message”,messageToPost);
Request.Callback=new Request.Callback(){
未完成公共无效(响应){
JSONObject graphResponse=响应
.getGraphObject()
.getInnerJ