java - Android - Accesstoken 错误 facebook

标签 java android facebook

这里我无法获取accessToken,甚至个人资料图片。

不知道自己做错了什么。

请帮忙。

我已经把一切都设置好了。

package com.example;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.*;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.Profile;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.facebook.login.widget.ProfilePictureView;


public class MainActivity extends AppCompatActivity {
    CallbackManager callbackManager;
    public String accessToken;
    private ProfilePictureView profilePictureView;
    String name;
    TextView fname;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(this.getApplicationContext());
        setContentView(R.layout.activity_main);

        fname = (TextView) findViewById(R.id.textView);
        profilePictureView = (ProfilePictureView) findViewById(R.id.profilePicture);

        callbackManager = CallbackManager.Factory.create();


        LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions("public_profile","email", "user_friends");
        // If using in a fragment
        //loginButton.setFragment(MainActivity.this);
        // Other app specific specialization

        // Callback registration
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                accessToken = String.valueOf(loginResult.getAccessToken());
                Toast.makeText(getBaseContext(),accessToken,Toast.LENGTH_LONG).show();
                Profile profile = Profile.getCurrentProfile();
                name = profile.getFirstName();
                fname.setText(name);
                profile = Profile.getCurrentProfile();
                profilePictureView.setProfileId(profile.getId());
            }

            @Override
            public void onCancel() {
                // App code
            }

            @Override
            public void onError(FacebookException exception) {
                Toast.makeText(getBaseContext(),exception.toString(),Toast.LENGTH_LONG).show();
            }
        });

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback() {

                    @Override
                    public void onSuccess(Object o) {

                    }

                    @Override
                    public void onCancel() {

                    }

                    @Override
                    public void onError(FacebookException error) {
                        Toast.makeText(getBaseContext(),error.toString(),Toast.LENGTH_LONG).show();

                    }
                });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

}

我正在尝试显示名称和 dp。 没有获取访问 token 。 谢谢。

最佳答案

To respond to a login result, you need to register a callback with either LoginManager or LoginButton. If you register the callback with LoginButton, don't need to register the callback on Login manager.

所以首先删除LoginManager

现在您可以使用 GraphRequest 获取用户数据,具体操作方法如下。

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {

        final ProgressDialog pd = new ProgressDialog(Login.this);
        pd.setMessage("Please Wait..");
        String accessToken = loginResult.getAccessToken().getToken();
        Log.i("accessToken", accessToken);

        GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object,
                                        GraphResponse response) {
                    Log.i("LoginActivity",
                        response.toString());
                    try {
                        id = object.getString("id");
                        try {
                            URL profile_pic = new URL(
                                                    "https://graph.facebook.com/" + id + "/picture?type=large");
                            user_image = profile_pic.toString();
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        }

                        name = object.getString("name");
                        email = object.getString("email");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            });
        Bundle parameters = new Bundle();
        parameters.putString("fields",
                "id,name,email,gender, birthday");
        request.setParameters(parameters);
        request.executeAsync();
        pd.show();
    }

    @Override
    public void onCancel() {
        // App code
    }

    @Override
    public void onError(FacebookException exception) {
        Toast.makeText(getBaseContext(),exception.toString(),Toast.LENGTH_LONG).show();
    }
});

了解有关 GraphRequest 的更多信息 Graph API

祝你编码愉快。

关于java - Android - Accesstoken 错误 facebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949661/

相关文章:

java - 如何将 GPS 坐标发送到另一个类

java - 相同的应用程序部署在两个不同的服务器上,但从数据库中获取相同的数据。如何同步数据库数据

java - 将 JPanel 添加到 JList?

java - Java中finish()和super.finish()的区别?

javascript - ie8下jQuery xml跨域数据解析失败

android - 为什么 FBAudienceNetwork 中的 "(#2) Service Temporarily Unavailable"?

java - 用java读取灰度图像

android - 在不重启安卓设备的情况下移除全局 http_proxy

Android 4.2 - 是否支持 LD_PRELOAD?

facebook - 如何解决错误: "The post’ s action links must be valid URLs"