Android 登录时使用毕加索获取Facebook个人资料图片
我在互联网上到处搜索,找不到适合我的解决方案。当用户使用facebook登录按钮登录应用程序时,我想获取他们的facebook个人资料图片,并将其用作我的应用程序中的个人资料图片。我正在尝试使用毕加索从Facebook的URL获取图片。这是我的代码。我犯了个错误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
@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();
}
});
你犯了什么错误?就在我把毕加索带入混音的地方。我在得到错误的那一行旁使用了一条注释。特别地,(这)是下划线,并说“毕加索不能被应用。@布拉德利·多林欢迎。如果答案解决了你的问题,请接受。