使用Fresco library android/java将图像从手机加载到我的应用程序

使用Fresco library android/java将图像从手机加载到我的应用程序,java,android,fresco,Java,Android,Fresco,你好,我是Fresco的新手,我正在尝试将手机中的所有图像加载到应用程序中 当我使用此URI时:/storage/emulated/0/DCIM/Camera/20200206_222309.jpg 使用此代码: ControllerListener listener=new BaseControllerListener(); DraineController控制器=Fresco.newDraineControllerBuilder() .setUri(xuri) .setTapToRetryE

你好,我是Fresco的新手,我正在尝试将手机中的所有图像加载到应用程序中

当我使用此URI时:
/storage/emulated/0/DCIM/Camera/20200206_222309.jpg

使用此代码:

ControllerListener listener=new BaseControllerListener();
DraineController控制器=Fresco.newDraineControllerBuilder()
.setUri(xuri)
.setTapToRetryEnabled(真)
.setControllerListener(侦听器)
.build();
PhotoFragmentRecycler.setController(控制器);
仅加载名为
20200206_222309.jpg
的照片 如何加载所有图像?
提前感谢

您的问题不取决于所使用的图像库。您基本上希望获得所有相机图像的列表。 类似这样的内容应该会让您获得所有URI的列表:

    fun getMediaStoreUris(context: Context): List<Uri> {
        val uris = mutableListOf<Uri>()
        context.contentResolver.query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                arrayOf(MediaStore.Images.Media._ID),
                null,
                null,
                null)?.use {
            val dataIndex = it.getColumnIndexOrThrow(MediaStore.Images.Media._ID)
            while (it.moveToNext()) {
                uris.add(
                        ContentUris.withAppendedId(
                                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                it.getLong(dataIndex)))
            }
        }
        return uris
    }
Fresco在其Showcase示例应用程序中提供了完整的示例:

如果您允许访问本地存储,这将起作用,有一个指南或测试它,只需转到应用程序的“应用程序信息”并手动允许即可


这是一个非常简单的解决方案,实际上,您可能希望为媒体存储实现分页等。但这应该会指引你正确的方向。

简单,用
Glide
库代替。Glide比fresco好吗?“表演中”@AspicasSure。您可以检查
glide
picasso
库。它们非常相似(有不同的选项),看起来问题更多的是如何获取URI列表,而不是使用哪个库。我添加了一个答案,以便更详细地解释。
  public class SimpleAdapter extends RecyclerView.Adapter<SimpleViewHolder> {

    private List<Uri> mUris;

    SimpleAdapter(List<Uri> uris) {
      mUris = uris;
      setHasStableIds(true);
    }

    @Override
    public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      View itemView =
          LayoutInflater.from(parent.getContext())
              .inflate(R.layout.drawee_recycler_item, parent, false);
      return new SimpleViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(SimpleViewHolder holder, int position) {
      holder.mSimpleDraweeView.setImageURI(mUris.get(position));
    }

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

    @Override
    public long getItemId(int position) {
      return mUris.get(position).hashCode();
    }

    public void setData(List<Uri> uris) {
      mUris = uris;
      notifyDataSetChanged();
    }
  }

  static class SimpleViewHolder extends RecyclerView.ViewHolder {

    private final SimpleDraweeView mSimpleDraweeView;

    SimpleViewHolder(View itemView) {
      super(itemView);
      mSimpleDraweeView = itemView.findViewById(R.id.drawee_view);
    }
  }
    final SimpleAdapter adapter = new SimpleAdapter(getMediaStoreUris(context));
    recyclerView.setAdapter(adapter);