【问题标题】:I have a problem regarding showing images from firebase in Recyclerview我在 Recyclerview 中显示来自 firebase 的图像时遇到问题
【发布时间】:2020-01-04 17:16:31
【问题描述】:

我想在 Recyclerview 中显示我从 firebase 存储上传的图片。

这是我的 ImagesShowingNotices.java 类

private RecyclerView mRecyclerView;
private ImageAdapter mAdapter;

private ProgressBar mProgressCircle;

private DatabaseReference mDatabaseRef;
private List<Uplaodfiles> mUploads;

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

    mRecyclerView = findViewById(R.id.recyclerviewitems);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

    mProgressCircle = findViewById(R.id.progress_circle);

    mUploads = new ArrayList<>();

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

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

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

            mRecyclerView.setAdapter(mAdapter);
            mProgressCircle.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(ImageShowingNotices.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            mProgressCircle.setVisibility(View.INVISIBLE);
        }
    });
}

@Override
protected void onStart() {
    super.onStart();

}

这是我的 UploadFiles.java 类

public Uplaodfiles() {
    //empty constructor needed
}

public Uplaodfiles(String name, String imageUrl) {
    if (name.trim().equals("")) {
        name = "No Name";
    }

    mName = name;
    mImageUrl = imageUrl;
}

public String getName() {
    return mName;
}

public void setName(String name) {
    mName = name;
}

public String getImageUrl() {
    return mImageUrl;
}

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

这是我的 ImageAdpter.java 类

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

@Override
public void onBindViewHolder(ImageViewHolder holder, int position) {
    Uplaodfiles uploadCurrent = mUploads.get(position);
    holder.textViewName.setText(uploadCurrent.getName());
    Glide.with(mContext)
            .load(uploadCurrent.getImageUrl())
            .into(holder.imageView);
}

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

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

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

        textViewName = itemView.findViewById(R.id.text_view_name);
        imageView = itemView.findViewById(R.id.image_view_upload);
    }
}

Logcat 显示“未连接适配器;跳过布局”。 我已经尝试过关于 StackOverflow 上发布的这个问题的其他解决方案,但对我没有任何帮助。请帮助我摆脱这种情况。

在此先感谢您。

【问题讨论】:

  • 你的问题主要是代码问题,尽量提供stacktrace
  • 我看到了一个接受的答案。你解决了问题吗?如果没有,请按要求添加数据库结构。也请回复@AlexMamo
  • 嗨,这是我的规则: service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { 允许读取,写入; } } }

标签: java android firebase-realtime-database android-recyclerview firebase-storage


【解决方案1】:

后数据库结构图 你可能引用了错误的节点

【讨论】:

  • 好的,我将发布数据库结构图像
【解决方案2】:

我认为您的回调中的 onDataChanged 方法调用不正确。

检查您的实时数据库节点结构并检查 logcat warn 级别以获取 firebase realtimedatabase 警告。

也许访问规则或任何其他问题都可能导致您的 IO 失败。

另外,当数据发生变化时重新创建Adapter并不是一个好的解决方案。

在生命周期的第一次将您的适配器设置为 RecyclerView。

您可以只更改适配器的数据并使用适配器调用notifyDatasetChanged

首先使用虚拟数据测试您的 RecyclerView。

【讨论】:

  • 我在第一次 recyclerview 时做了适配器设置,但应用程序崩溃了
猜你喜欢
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2017-05-24
  • 1970-01-01
相关资源
最近更新 更多