【问题标题】:picasso does not load image on start of appication毕加索在应用程序启动时不加载图像
【发布时间】:2017-11-08 02:43:09
【问题描述】:

我在我的 MainActivity 中使用了毕加索。在应用程序启动时,它不会从 firebase 链接加载图像。但是,当我去另一个活动并返回时,它会开始加载图像并显示它。实际上,我正在尝试根据帖子中的用户 ID (uid) 获取用户图像。

我的 MainActivity 代码: 附言对不起这么丑的编码,我是初学者。

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

【问题讨论】:

  • 当您开始活动时,用户是否已登录?
  • 是的,登录后MainActivity启动了,但是好像一开始uid是空的。

标签: java android firebase picasso


【解决方案1】:

为了解决这个问题,我建议您使用Glide 而不是毕加索。要使其工作,请在您的 build.gradle (Module: 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 是您照片的实际网址,imageView 是您要在其中显示照片的 ImageView。

【讨论】:

  • 感谢您的回复。我将它应用于我的应用程序,但它没有帮助。看来,原因是图片链接变得很慢
  • 即使你使用Glide?是有一点区别还是完全没有区别?
  • 我认为问题不在于 Glide 或 Picasso,因为当我第一次启动应用程序时,图像链接为空,但后来它得到了一个值。我的代码似乎有问题。
  • 获取图片链接耗时过长
猜你喜欢
  • 2016-06-27
  • 2014-10-30
  • 2014-08-29
  • 1970-01-01
  • 2015-12-17
  • 2016-04-02
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多