如何通过 graphRequest 以更高分辨率加载 Facebook 封面照片? [Android | Facebook v2.3]
How to load Facebook cover photo via graphRequest with a higher resolution? [Android | Facebook v2.3]
我正在编写一个 Android 应用程序,我需要用户使用 Facebook 登录。
登录正常,我也得到了个人资料照片,但照片的分辨率很低——大约 50 px x 50 px。有没有可能得到更好的?
以下代码用于加载图像,在 Facebook 登录过程和 GraphRequest.newMeRequest
.
之后
public class LoadFacebookUserPicture extends AsyncTask<String, Void, Bitmap> {
private Context context;
public LoadFacebookUserPicture (Context context) {
this.context = context;
}
@Override
protected Bitmap doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
FileOutputStream fos = context.openFileOutput("test.png", Context.MODE_PRIVATE);
myBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
return null;
} catch (Exception e) {
e.printStackTrace();
Log.e("LoadFacebookUserPicture", e.getMessage());
}
Log.e("LoadFacebookUserPicture", "Passt");
return null;
}
}
这是请求,在 class 内调用 LoadFacebookUserPicture。
GraphRequest request = GraphRequest.newMeRequest(
currentAccessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Save facebook data
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(getString(R.string.userdata_facebook), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
try {
// Lese von FB json objekt
int fb_id = ((JSONObject) object).getInt("id");
String fb_name = ((JSONObject) object).getString("name");
String fb_gender = ((JSONObject) object).getString("gender");
String fb_link = ((JSONObject) object).getString("link");
JSONObject json_data = ((JSONObject) object).getJSONObject("picture").getJSONObject("data");
String fb_picture_url = json_data.getString("url");
// Schreibe in private shared pref der activity
editor.putInt(getString(R.string.fb_user_id), fb_id);
editor.putString(getString(R.string.fb_user_name), fb_name);
editor.putString(getString(R.string.fb_user_gender), fb_gender);
editor.putString(getString(R.string.fb_user_link), fb_link);
editor.putString(getString(R.string.fb_user_picture_url), fb_picture_url);
editor.commit();
String[] params = new String[1];
params[0] = fb_picture_url;
new LoadFacebookUserPicture(MainActivity.this).execute(params);
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,birthday,gender,link,picture");
request.setParameters(parameters);
request.executeAsync();
试试这个,这会给你一个更好的图像
http://graph.facebook.com/<fb_id >/picture?type=large
我正在编写一个 Android 应用程序,我需要用户使用 Facebook 登录。
登录正常,我也得到了个人资料照片,但照片的分辨率很低——大约 50 px x 50 px。有没有可能得到更好的?
以下代码用于加载图像,在 Facebook 登录过程和 GraphRequest.newMeRequest
.
public class LoadFacebookUserPicture extends AsyncTask<String, Void, Bitmap> {
private Context context;
public LoadFacebookUserPicture (Context context) {
this.context = context;
}
@Override
protected Bitmap doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
FileOutputStream fos = context.openFileOutput("test.png", Context.MODE_PRIVATE);
myBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
return null;
} catch (Exception e) {
e.printStackTrace();
Log.e("LoadFacebookUserPicture", e.getMessage());
}
Log.e("LoadFacebookUserPicture", "Passt");
return null;
}
}
这是请求,在 class 内调用 LoadFacebookUserPicture。
GraphRequest request = GraphRequest.newMeRequest(
currentAccessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Save facebook data
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(getString(R.string.userdata_facebook), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
try {
// Lese von FB json objekt
int fb_id = ((JSONObject) object).getInt("id");
String fb_name = ((JSONObject) object).getString("name");
String fb_gender = ((JSONObject) object).getString("gender");
String fb_link = ((JSONObject) object).getString("link");
JSONObject json_data = ((JSONObject) object).getJSONObject("picture").getJSONObject("data");
String fb_picture_url = json_data.getString("url");
// Schreibe in private shared pref der activity
editor.putInt(getString(R.string.fb_user_id), fb_id);
editor.putString(getString(R.string.fb_user_name), fb_name);
editor.putString(getString(R.string.fb_user_gender), fb_gender);
editor.putString(getString(R.string.fb_user_link), fb_link);
editor.putString(getString(R.string.fb_user_picture_url), fb_picture_url);
editor.commit();
String[] params = new String[1];
params[0] = fb_picture_url;
new LoadFacebookUserPicture(MainActivity.this).execute(params);
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,birthday,gender,link,picture");
request.setParameters(parameters);
request.executeAsync();
试试这个,这会给你一个更好的图像
http://graph.facebook.com/<fb_id >/picture?type=large