簡體   English   中英

圖像未顯示在Firebase RecyclerView中

[英]Image Not Displaying in firebase RecyclerView

我正在嘗試顯示Firebase數據庫中的圖像。 我認為在Firebase中一切都很好,但是什么也沒顯示。它沒有在布局中顯示圖像,我為recyclerview和item_view.xml創建了main_layout這是我的代碼。

MainActivity.java

<i>public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ImageAdapter mAdapter;


private DatabaseReference mDatabaseRef;
private List<Upload> mUploads;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRecyclerView = findViewById(R.id.recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));

    mUploads = new ArrayList<>();

    mDatabaseRef = FirebaseDatabase.getInstance().getReference("Data");

    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                Upload upload = postSnapshot.getValue(Upload.class);
                mUploads.add(upload);
            }

            mAdapter = new ImageAdapter(MainActivity.this, mUploads);


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(MainActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}

}

ImageAdapter.java

<i>public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {
private Context mContext;
private List<Upload> mUploads;

public ImageAdapter(Context context, List<Upload> uploads) {
    mContext = context;
    mUploads = uploads;
}

@Override
public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.item_view, parent, false);
    return new ImageViewHolder(v);
}

@Override
public void onBindViewHolder(ImageViewHolder holder, int position) {
    Upload uploadCurrent = mUploads.get(position);
    picasso.get()
            .load(uploadCurrent.getImageUrl())
            .placeholder(R.mipmap.ic_launcher)
            .fit()
            .centerCrop()
            .into(holder.imageView);
}

@Override
public int getItemCount() {
    return mUploads.size();
}

public class ImageViewHolder extends RecyclerView.ViewHolder {
    public ImageView imageView;

    public ImageViewHolder(View itemView) {
        super(itemView);

        imageView = itemView.findViewById(R.id.image_view);
    }
}
Picasso.Builder picassoBuilder = new Picasso.Builder(mContext);
Picasso picasso = picassoBuilder.build();

}

Upload.java

<i>

公共類Upload {private String mImageUrl;

public Upload() {

}

public Upload( String imageUrl) {
    mImageUrl = imageUrl;
}

public String getImageUrl() {
    return mImageUrl;
}

public void setImageUrl(String imageUrl) {
    mImageUrl = imageUrl;
}

}

調試輸出:

您沒有為recyclerView設置適配器,並且從Firebase接收數據后也沒有更新適配器。 我將通過以下方式解決此問題。 首先,在適配器中添加一個setter:

public void setUploads(List<Upload> uploads) {
    this.mUploads = uploads;
    this.notifyDataSetChanged();
}

這將使您可以輕松地修改適配器的數據集。 然后,在您的活動中,如下更改onCreate方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRecyclerView = findViewById(R.id.recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));

    mAdapter = new ImageAdapter(MainActivity.this, new ArrayList<>());
    mRecyclerView.setAdapter(mAdapter);

    mDatabaseRef = FirebaseDatabase.getInstance().getReference("Data");

    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<Upload> readUploads = new ArrayList<>();
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                Upload upload = postSnapshot.getValue(Upload.class);
                readUploads.add(upload);
            }
            mAdapter.setUploads(readUploads);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(MainActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}

這樣,您將從一個空列表開始,因此您的recyclerView將什么也不顯示。 然后,當您接收到數據時,您只需對其進行更新,就可以在適配器中設置數據集並通知適配器某些更改,因此必須重新繪制列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM