希望你能注意到下面的图片中的教授照片,但是做这件事的随机人只是对图像进行了硬编码。我从Facebook获取了用户名,电子邮件ID和prof图片,我已经将用户名和电子邮件ID与导航抽屉活动挂钩,但我不知道如何显示我从Facebook获取的prof_pic我只是不知道没有如何分配它。如果有任何可行的方法,请告诉我。以下是nav_header.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<ImageView
android:id="@+id/profpic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:src="@android:drawable/sym_def_app_icon" />
</LinearLayout>
这是我需要从中获取prof_pic的java文件 .java类文件
public class Testing2 extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testing2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
////////Code is used to fetch the user name////////////
Bundle b = getIntent().getExtras();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
TextView facebookName = (TextView) navigationView.getHeaderView(0).findViewById(R.id.manner);
TextView Email = (TextView) navigationView.getHeaderView(0).findViewById(R.id.email);
ImageView profilePictureView = (ImageView) navigationView.getHeaderView(0).findViewById(R.id.profpic);
////////Code is used to display the user name after fetching it from other activity////////////
facebookName.setText(b.getCharSequence("name"));
Email.setText(b.getCharSequence("email"));
profilePictureView.setProfileId();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
}
这是我用来获取用户名,邮件ID和教授图片
的.java文件public class SelfTrail extends AppCompatActivity implements View.OnClickListener {
private LoginButton btnLogin;
TextView facebookName;
TextView Email;
Button button;
private CallbackManager callbackManager;
private ProfilePictureView profilePictureView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_self_trail);
findAllViewsId();
button.setOnClickListener(this);
btnLogin = (LoginButton)findViewById(R.id.login_button);
facebookName = (TextView)findViewById(R.id.name);
Email = (TextView)findViewById(R.id.Email);
profilePictureView = (ProfilePictureView)findViewById(R.id.image);
btnLogin.setReadPermissions(Arrays.asList("public_profile, email"));
callbackManager = CallbackManager.Factory.create();
if(AccessToken.getCurrentAccessToken() != null){
RequestData();
facebookName.setVisibility(View.VISIBLE);
Email.setVisibility(View.VISIBLE);
profilePictureView.setVisibility(View.VISIBLE);
}
btnLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.v("Main", response.toString());
setProfileToView(object);
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
}
});
}
private void findAllViewsId() {
button = (Button) findViewById(R.id.next);
facebookName = (TextView)findViewById(R.id.name);
Email = (TextView)findViewById(R.id.Email);
profilePictureView = (ProfilePictureView)findViewById(R.id.image);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), Testing2.class);
//Create a bundle object
Bundle b = new Bundle();
//Inserts a String value into the mapping of this Bundle
b.putString("name", facebookName.getText().toString());
b.putString("email", Email.getText().toString());
b.putString("image", profilePictureView.toString());
//Add the bundle to the intent.
intent.putExtras(b);
//start the DisplayActivity
startActivity(intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
public void RequestData(){
GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject jsonObject,GraphResponse response) {
JSONObject json = response.getJSONObject();
try {
if(json != null){
facebookName.setText(jsonObject.getString("name"));
Email.setText(jsonObject.getString("email"));
profilePictureView.setPresetSize(ProfilePictureView.NORMAL);
profilePictureView.setProfileId(jsonObject.getString("id"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
}
private void setProfileToView(JSONObject jsonObject) {
try {
facebookName.setText(jsonObject.getString("name"));
Email.setText(jsonObject.getString("email"));
profilePictureView.setPresetSize(ProfilePictureView.NORMAL);
profilePictureView.setProfileId(jsonObject.getString("id"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:4)
最好的方法是使用毕加索图书馆。它会自动从后台的URL中提取图像并将其设置为imageView。
将其添加到依赖项
下的build.gradle文件中 compile 'com.squareup.picasso:picasso:2.5.2'
然后在你的代码而不是profilePictureView.setProfileId();使用
Picasso.with(this).load( "http://graph.facebook.com/"+userID+"/picture?type=small").into(profilePictureView)
其中userID是配置文件的已使用ID。
答案 1 :(得分:1)
我不知道这是做什么的:
profilePictureView.setProfileId();
但要设置图像只需使用:
profilePictureView.setImageBitmap(pass_image_bitmap_here);
答案 2 :(得分:1)
您可以随时使用图像加载库以高效方式加载图像(例如Picasso或Glide)。 在你的情况下,(使用毕加索)你可以写
Picasso.with(context)
.load(url)
.placeholder(R.drawable.loading_img)
.error(R.drawable.error_img)
.into(profilePictureView);
你的网址= https://graph.facebook.com/“+ id +”/图片?宽度= 200&amp; height = 150
我希望这会有所帮助。
答案 3 :(得分:0)
您只需要用户的用户ID,然后就可以调用这样的函数:
/**
* Function loads the users facebook profile pic
*
* @param userID
*/
public Bitmap getUserPic(String userID) {
String imageURL;
Bitmap bitmap = null;
Log.d(TAG, "Loading Picture");
imageURL = "http://graph.facebook.com/"+userID+"/picture?type=small";
try {
bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageURL).getContent());
} catch (Exception e) {
Log.d("TAG", "Loading Picture FAILED");
e.printStackTrace();
}
return bitmap;
}
答案 4 :(得分:0)
这就是我提出的方式。
使用用于android中图像处理的Picasso
库。
在gradle中添加依赖项:
compile 'com.squareup.picasso:picasso:2.5.2'
添加您的活动以显示提取的图片:
Picasso.with(context)
.load(url)
.placeholder(R.drawable.loading_img)
.error(R.drawable.error_img)
.into(profilePictureView);