Android 登录时使用毕加索获取Facebook个人资料图片

Android 登录时使用毕加索获取Facebook个人资料图片,android,facebook,login,picasso,user-profile,Android,Facebook,Login,Picasso,User Profile,我在互联网上到处搜索,找不到适合我的解决方案。当用户使用facebook登录按钮登录应用程序时,我想获取他们的facebook个人资料图片,并将其用作我的应用程序中的个人资料图片。我正在尝试使用毕加索从Facebook的URL获取图片。这是我的代码。我犯了个错误 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV

我在互联网上到处搜索,找不到适合我的解决方案。当用户使用facebook登录按钮登录应用程序时,我想获取他们的facebook个人资料图片,并将其用作我的应用程序中的个人资料图片。我正在尝试使用毕加索从Facebook的URL获取图片。这是我的代码。我犯了个错误

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    if (getIntent().getBooleanExtra("EXIT", false)) {
    }

    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);

    loginButton = (LoginButton) findViewById(R.id.fb_login_btn);
    callbackManager = CallbackManager.Factory.create();


    accessTokenTracker = new AccessTokenTracker() {

        @Override
        protected void onCurrentAccessTokenChanged(AccessToken 
    oldAccessToken, AccessToken currentAccessToken) {

        }
    };

    accessToken = AccessToken.getCurrentAccessToken();

    if (AccessToken.getCurrentAccessToken() == null) {

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

                Picasso.with(this) //I'm getting an error here "Picasso 
                cannot be applied"
                        .load("https://graph.facebook.com/" + 
                        loginResult.getAccessToken().getUserId(); + 
                        "/picture?type=large")
                        .into(profilePhoto);



                Toast.makeText(LoginActivity.this, "Login Successful", 
                Toast.LENGTH_SHORT).show();
                {
                    Intent intent = new Intent(LoginActivity.this, 
                    MainActivity.class);
                    startActivity(intent);
                }

                finish();

            }

            @Override
            public void onCancel() {

                Toast.makeText(LoginActivity.this, "Login Cancelled", 
                Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onError(FacebookException error) {

                Toast.makeText(LoginActivity.this, "Login Error", 
                Toast.LENGTH_SHORT).show();

            }
        });



    } else {

        Intent intent = new Intent(LoginActivity.this, 
        MainActivity.class);
        startActivity(intent);
        this.finish();

    }
}

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

@Override
public void onDestroy() {
    super.onDestroy();
    accessTokenTracker.stopTracking();
}
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
if(getIntent().getBooleanExtra(“退出”,false)){
}
sdkinInitialize(getApplicationContext());
AppEventsLogger.activateApp(此);
loginButton=(loginButton)findViewById(R.id.fb\u login\u btn);
callbackManager=callbackManager.Factory.create();
accessTokenTracker=新的accessTokenTracker(){
@凌驾
受保护的onCurrentAccessTokenChanged无效(AccessToken
oldAccessToken、AccessToken(当前AccessToken){
}
};
accessToken=accessToken.getCurrentAccessToken();
if(AccessToken.getCurrentAccessToken()==null){
loginButton.registerCallback(callbackManager,新建
FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
毕加索://我这里有个错误“毕加索
无法应用“
.加载(“https://graph.facebook.com/" + 
loginResult.getAccessToken().getUserId();+
“/picture?type=large”)
.into(照片);
Toast.makeText(LoginActivity.this,“登录成功”,
吐司。长度(短)。show();
{
意向意向=新意向(LoginActivity.this,
主要活动(课堂);
星触觉(意向);
}
完成();
}
@凌驾
公开作废{
Toast.makeText(LoginActivity.this,“登录已取消”,
吐司。长度(短)。show();
}
@凌驾
public void onError(facebook异常错误){
Toast.makeText(LoginActivity.this,“登录错误”,
吐司。长度(短)。show();
}
});
}否则{
意向意向=新意向(LoginActivity.this,
主要活动(课堂);
星触觉(意向);
这个;
}
}
@凌驾
ActivityResult上受保护的void(int requestCode、int resultCode、Intent
(数据){
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
@凌驾
公共空间{
super.ondestory();
accessTokenTracker.stopTracking();
}
}

这部分有问题

 Picasso.with(this) //I'm getting an error here "Picasso 
            cannot be applied"
                    .load("https://graph.facebook.com/" + 
                    facebook_id + "/picture?type=large")
                    .into(profilePhoto);
在这里,您需要传递活动或应用程序上下文,而不是“this”。 如果您在活动中,请键入“YourActivityName.this”,如果您在片段中,请使用“getActivity”。 如果您正在思考为什么“this”不起作用,那么这里的“this”表示匿名内部类

试试这个

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

            loginResult.getAccessToken().getUserId();



          GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(),
        new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(
                    JSONObject object,
                    GraphResponse response) {
                // Application code

                try {


                    if (object.has("picture")) {
                        //String profilePicUrl="http://graph.facebook.com/"+object.getString("id")+"/picture?type=large";
                        String profilePicUrl = object.getJSONObject("picture").getJSONObject("data").getString("url");
                        profilePicUrl = profilePicUrl.replace("\\", "");


                        Picasso.with(YourActivity.this)                          
                                .load(profilePicUrl)
                                .into(profilePhoto);

                    }


                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
           Bundle parameters = new Bundle();
                        parameters.putString("fields", "id,name,email,gender,picture.type(large)");
                        request.setParameters(parameters);
                        request.executeAsync();


            Toast.makeText(LoginActivity.this, "Login Successful", 
            Toast.LENGTH_SHORT).show();
            {
                Intent intent = new Intent(LoginActivity.this, 
                MainActivity.class);
                startActivity(intent);
            }

            finish();

        }

        @Override
        public void onCancel() {

            Toast.makeText(LoginActivity.this, "Login Cancelled", 
            Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onError(FacebookException error) {

            Toast.makeText(LoginActivity.this, "Login Error", 
            Toast.LENGTH_SHORT).show();

        }
    });
loginButton.registerCallback(callbackManager,新版本
FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
loginResult.getAccessToken().getUserId();
GraphRequest请求=GraphRequest.newmereRequest(
loginResult.getAccessToken(),
新建GraphRequest.GraphJSONObjectCallback(){
@凌驾
公共空间未完成(
JSONObject对象,
GraphResponse(反应){
//应用程序代码
试一试{
if(object.has(“图片”)){
//字符串profilePicUrl=”http://graph.facebook.com/“+object.getString(“id”)+”/picture?type=large”;
String profilePicUrl=object.getJSONObject(“图片”).getJSONObject(“数据”).getString(“url”);
profilePicUrl=profilePicUrl.replace(“\\”,”);
毕加索用(你的活动,这个)
.load(profilePicUrl)
.into(照片);
}
}捕获(例外e){
e、 printStackTrace();
}
}
});
Bundle参数=新Bundle();
parameters.putString(“字段”、“id、姓名、电子邮件、性别、图片类型(大)”);
请求。设置参数(参数);
request.executeAsync();
Toast.makeText(LoginActivity.this,“登录成功”,
吐司。长度(短)。show();
{
意向意向=新意向(LoginActivity.this,
主要活动(课堂);
星触觉(意向);
}
完成();
}
@凌驾
公开作废{
Toast.makeText(LoginActivity.this,“登录已取消”,
吐司。长度(短)。show();
}
@凌驾
public void onError(facebook异常错误){
Toast.makeText(LoginActivity.this,“登录错误”,
吐司。长度(短)。show();
}
});

你犯了什么错误?就在我把毕加索带入混音的地方。我在得到错误的那一行旁使用了一条注释。特别地,(这)是下划线,并说“毕加索不能被应用。@布拉德利·多林欢迎。如果答案解决了你的问题,请接受。