毕加索在应用程序启动时不加载图像
picasso does not load image on start of appication
我在 MainActivity 上使用了 picasso。在应用程序启动时,它不会从 firebase link 加载图像。但是,当我转到另一个 activity 并返回时,它开始加载图像并显示它。实际上,我试图根据 post.
中的用户 ID (uid) 获取用户图像
我的 MainActivity 代码:
P.S。很抱歉这么难看的编码,我是初学者。
String userImage = null;
String postKey = null;
String uid = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDatabase = FirebaseDatabase.getInstance().getReference().child("Posts");
mDatabaseUsers = FirebaseDatabase.getInstance().getReference("Users");
mUsers = FirebaseDatabase.getInstance().getReference("Users");
mDatabaseUsers.keepSynced(true);
mAuth = FirebaseAuth.getInstance();
mPostList = findViewById(R.id.postList);
mPostList.setHasFixedSize(true);
mPostList.setLayoutManager(new LinearLayoutManager(this));
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
final FirebaseRecyclerAdapter<Post, PostViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(
Post.class,
R.layout.post_row,
PostViewHolder.class,
mDatabase) {
@Override
protected void populateViewHolder(PostViewHolder viewHolder, Post model, int position) {
postKey = getRef(position).getKey();
viewHolder.setImage(getUserImage());
viewHolder.setFrom(model.getFrom());
viewHolder.setTo(model.getTo());
viewHolder.setPrice(model.getPrice());
viewHolder.setDate(model.getDate());
viewHolder.setDate(model.getDate());
viewHolder.setCar(model.getCar());
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent particularPostIntent = new Intent(MainActivity.this, ParticularPostActivity.class);
particularPostIntent.putExtra("PostId", postKey);
startActivity(particularPostIntent);
}
});
}
};
mPostList.setAdapter(firebaseRecyclerAdapter);
}
public static class PostViewHolder extends RecyclerView.ViewHolder {
View mView;
public PostViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setFrom(String from){
TextView postFrom = mView.findViewById(R.id.rowFrom);
postFrom.setText("From: " +from);
}
public void setTo(String to){
TextView postTo = mView.findViewById(R.id.rowTo);
postTo.setText("To: " + to);
}
public void setPrice(String price){
TextView postPrice = mView.findViewById(R.id.rowPrice);
postPrice.setText("Price: " + price);
}
public void setDate(String date){
TextView postDate = mView.findViewById(R.id.rowDate);
postDate.setText("Date: " + date);
}
public void setCar(String car){
TextView postCar = mView.findViewById(R.id.rowCar);
postCar.setText("Car: " + car);
}
public void setImage(String image){
ImageView userImageView = mView.findViewById(R.id.rowProfileImage);
Picasso.with(mView.getContext()).setLoggingEnabled(true);
Picasso.with(mView.getContext()).load(image).placeholder(R.mipmap.ic_account_circle_black_48dp).into(userImageView);
}
}
public String getUserImage(){
mDatabase.child(postKey).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
uid = (String) dataSnapshot.child("userID").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mUsers.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
userImage = (String) dataSnapshot.child(uid).child("Image").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return userImage;
}
为了解决这个问题,我建议您使用 Glide
而不是 Picasso。要使其正常工作,请在 build.gradle(模块:app)文件的 dependencies
中添加以下代码行。
compile 'com.github.bumptech.glide:glide:3.7.0'
要显示图像,只需使用以下代码行:
Glide.with(getApplicationContext())
.load(photoUrl)
.centerCrop()
.transform(new CircleTransform(getApplicationContext()))
.override(45,45)
.into(imageView);
其中 photoUrl
是您照片的实际 url,imageView
是您要显示照片的 ImageView。
我在 MainActivity 上使用了 picasso。在应用程序启动时,它不会从 firebase link 加载图像。但是,当我转到另一个 activity 并返回时,它开始加载图像并显示它。实际上,我试图根据 post.
中的用户 ID (uid) 获取用户图像我的 MainActivity 代码: P.S。很抱歉这么难看的编码,我是初学者。
String userImage = null;
String postKey = null;
String uid = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDatabase = FirebaseDatabase.getInstance().getReference().child("Posts");
mDatabaseUsers = FirebaseDatabase.getInstance().getReference("Users");
mUsers = FirebaseDatabase.getInstance().getReference("Users");
mDatabaseUsers.keepSynced(true);
mAuth = FirebaseAuth.getInstance();
mPostList = findViewById(R.id.postList);
mPostList.setHasFixedSize(true);
mPostList.setLayoutManager(new LinearLayoutManager(this));
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
final FirebaseRecyclerAdapter<Post, PostViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(
Post.class,
R.layout.post_row,
PostViewHolder.class,
mDatabase) {
@Override
protected void populateViewHolder(PostViewHolder viewHolder, Post model, int position) {
postKey = getRef(position).getKey();
viewHolder.setImage(getUserImage());
viewHolder.setFrom(model.getFrom());
viewHolder.setTo(model.getTo());
viewHolder.setPrice(model.getPrice());
viewHolder.setDate(model.getDate());
viewHolder.setDate(model.getDate());
viewHolder.setCar(model.getCar());
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent particularPostIntent = new Intent(MainActivity.this, ParticularPostActivity.class);
particularPostIntent.putExtra("PostId", postKey);
startActivity(particularPostIntent);
}
});
}
};
mPostList.setAdapter(firebaseRecyclerAdapter);
}
public static class PostViewHolder extends RecyclerView.ViewHolder {
View mView;
public PostViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setFrom(String from){
TextView postFrom = mView.findViewById(R.id.rowFrom);
postFrom.setText("From: " +from);
}
public void setTo(String to){
TextView postTo = mView.findViewById(R.id.rowTo);
postTo.setText("To: " + to);
}
public void setPrice(String price){
TextView postPrice = mView.findViewById(R.id.rowPrice);
postPrice.setText("Price: " + price);
}
public void setDate(String date){
TextView postDate = mView.findViewById(R.id.rowDate);
postDate.setText("Date: " + date);
}
public void setCar(String car){
TextView postCar = mView.findViewById(R.id.rowCar);
postCar.setText("Car: " + car);
}
public void setImage(String image){
ImageView userImageView = mView.findViewById(R.id.rowProfileImage);
Picasso.with(mView.getContext()).setLoggingEnabled(true);
Picasso.with(mView.getContext()).load(image).placeholder(R.mipmap.ic_account_circle_black_48dp).into(userImageView);
}
}
public String getUserImage(){
mDatabase.child(postKey).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
uid = (String) dataSnapshot.child("userID").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mUsers.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
userImage = (String) dataSnapshot.child(uid).child("Image").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return userImage;
}
为了解决这个问题,我建议您使用 Glide
而不是 Picasso。要使其正常工作,请在 build.gradle(模块:app)文件的 dependencies
中添加以下代码行。
compile 'com.github.bumptech.glide:glide:3.7.0'
要显示图像,只需使用以下代码行:
Glide.with(getApplicationContext())
.load(photoUrl)
.centerCrop()
.transform(new CircleTransform(getApplicationContext()))
.override(45,45)
.into(imageView);
其中 photoUrl
是您照片的实际 url,imageView
是您要显示照片的 ImageView。