简体   繁体   中英

picasso does not load image on start of appication

I have used picasso on my MainActivity. On start of application it does not load image from the firebase link. However, when i go to another activity and go back, it starts loading image and show it. Actually, i am trying to get user image according to user ID (uid) in post.

My MainActivity code: PS Sorry for such ugly coding, I am very beginner.

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;
}

To solve this, i recomand you using Glide instead of Picasso. To make it work, add the following line of code in the dependencies of your build.gradle (Module: app) file.

compile 'com.github.bumptech.glide:glide:3.7.0'

To display the image just use the following line of code:

Glide.with(getApplicationContext())
    .load(photoUrl)
    .centerCrop()
    .transform(new CircleTransform(getApplicationContext()))
    .override(45,45)
    .into(imageView);

Where photoUrl is the actual url of your photo and imageView is the ImageView where you want to display the photo.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM