我可以从 Facebook SDK 访问名称、图像和其他内容。我可以在登录时在 ImageView 中设置图像。然后如果我返回并运行相同的 Activity,则登录为 True 但图像不是在 ImageView 中设置。我必须使用 Shared Pref 来保存图像吗?或者 facebook 通过 Session 提供此功能。我正在使用 Picasso 使用图像缓存,但未设置图像。
callbackManager = CallbackManager.Factory.create();
nowLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(HomeStayDetailPage.this, "Success", Toast.LENGTH_SHORT).show();
AccessToken accessToken = loginResult.getAccessToken();
GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try {
userID = (String) object.get("id");
String userName = (String) object.get("name");
Picasso.with(HomeStayDetailPage.this).load("https://graph.facebook.com/" + userID + "/picture?type=large").error(R.mipmap.close_hire_guide).into(facebook_image_loader_imageView);
System.out.println("hello userID" + userID);
System.out.println("hello userName" + userName);
//Bitmap b = (Bitmap) object.get("picture");
// tv = (TextView) findViewById(R.id.textView2);
// tv.setText("Hello" + " " + userName);
Log.d("o/p", "name");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,picture");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
public boolean isLoggedIn() {
AccessToken accessToken = AccessToken.getCurrentAccessToken();
return accessToken != null;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
//
// if (isLoggedIn() == true) {
// Picasso.with(getApplicationContext()).load("https://graph.facebook.com/" + userID + "/picture?type=large").memoryPolicy(MemoryPolicy.NO_STORE).networkPolicy(NetworkPolicy.OFFLINE).error(R.drawable.close).into(facebook_image_loader_imageView, new Callback() {
// @Override
// public void onSuccess() {
//
// }
//
// @Override
// public void onError() {
// //Try again online if cache failed
// Picasso.with(getApplicationContext())
// .load("https://graph.facebook.com/" + userID + "/picture?type=large")
// .error(R.drawable.close)
// .into(facebook_image_loader_imageView, new Callback() {
// @Override
// public void onSuccess() {
//
// }
//
// @Override
// public void onError() {
// Log.v("Picasso", "Could not fetch image");
// }
// });
// }
// });
//
//
// }
为什么当 onBackpressed 和调用相同的 Activity 时我无法在登录后设置图像?
最佳答案
您可以使用共享首选项来存储和访问数据
try {
userID = (String) object.get("id");
String userName = (String) object.get("name");
Picasso.with(HomeStayDetailPage.this).load("https://graph.facebook.com/" + userID + "/picture?type=large").error(R.mipmap.close_hire_guide).into(facebook_image_loader_imageView);
System.out.println("hello userID" + userID);
System.out.println("hello userName" + userName);
SharedPreferences.Editor editor = getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE).edit();
editor.putString("id", userID);
editor.commit();
//Bitmap b = (Bitmap) object.get("picture");
// tv = (TextView) findViewById(R.id.textView2);
// tv.setText("Hello" + " " + userName);
Log.d("o/p", "name");
}
访问 ONcreate 上的信息
如果(isLoggedIn() == 真){
SharedPreferences prefs = getSharedPreferences("MY_PREFS_NAME", 0);
String response = prefs.getString("id", userID);
Toast.makeText(this, response, Toast.LENGTH_SHORT).show();
System.out.println("htis is response " + response);
Picasso.with(HomeStayDetailPage.this).load("https://graph.facebook.com/" + response + "/picture?type=large").error(R.mipmap.close_hire_guide).into(facebook_image_loader_imageView);
}
Try this
关于android - 使用 Facebook SDK 登录后仅设置一次图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45930837/