Java 回收器视图不显示图片

Java 回收器视图不显示图片,java,android,uri,gallery,Java,Android,Uri,Gallery,我正在创建一个显示用户提供给它的图像的回收器视图,我获取图片目录,然后创建一个文件,然后从文件中创建一个位图,并将其设置为我的图像视图。但当用户选择图片时,recycer view不会显示它 我使用了权限和dexter库,但它不起作用 我的适配器 public class Adaptor extends RecyclerView.Adapter<Adaptor.ViewHolder> { private Context context; private List<

我正在创建一个显示用户提供给它的图像的回收器视图,我获取图片目录,然后创建一个文件,然后从文件中创建一个位图,并将其设置为我的图像视图。但当用户选择图片时,recycer view不会显示它

我使用了权限和dexter库,但它不起作用

我的适配器

public class Adaptor extends RecyclerView.Adapter<Adaptor.ViewHolder> {
    private Context context;
    private List<model> list;

    public Adaptor(Context context, List<model> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public Adaptor.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view= LayoutInflater.from(context).inflate(R.layout.imageview,viewGroup,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull Adaptor.ViewHolder viewHolder, int i) {
        model model=list.get(i);
        Uri uri= Uri.parse(model.getPath());
        File file=new File(String.valueOf(uri));
            Bitmap bitmap= BitmapFactory.decodeFile(file.getAbsolutePath());
            viewHolder.img.setImageBitmap(bitmap);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView img;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            img=itemView.findViewById(R.id.img_view);
        }
    }
我的模范班

public class model {
    String path;

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }
}
我的活动

public class MainActivity extends AppCompatActivity {
    database database=new database(this);
    SQLiteDatabase sqLiteDatabase;
    RecyclerView rec_view;
    List<model> list=new ArrayList<>();
    Context context;
Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Dexter.withActivity(this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE).withListener(new PermissionListener() {
            @Override
            public void onPermissionGranted(PermissionGrantedResponse response) {
                Toast.makeText(context, "thanks", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onPermissionDenied(PermissionDeniedResponse response) {
                Toast.makeText(context, "please give premission", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {

            }
        }).check();
        context = this;
        final Adaptor adaptor = new Adaptor(context, list);
        rec_view = findViewById(R.id.rec_image);
        rec_view.setAdapter(adaptor);
        rec_view.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        btn = findViewById(R.id.loadimage);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(intent, 0);
                Cursor cursor = database.cursor();
                for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
                    model model = new model();
                    model.setPath(cursor.getString(1));
                    list.add(model);
                    adaptor.notifyDataSetChanged();
                    startActivity(new Intent(getApplicationContext(),MainActivity.class));
                }
            }
        });



    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    if (requestCode==RESULT_OK){
        Uri tartgeturi=data.getData();
        String directory=String.valueOf(tartgeturi);
        database.insert(directory);
        }



    }

    }
public类MainActivity扩展了AppCompatActivity{
数据库=新数据库(此);
SQLiteDatabase SQLiteDatabase;
RecyclerView rec_视图;
列表=新的ArrayList();
语境;
按钮btn;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
withActivity(this).withPermission(Manifest.permission.READ\u EXTERNAL\u STORAGE).withListener(new PermissionListener()){
@凌驾
已授予许可的公共无效(许可授予响应){
Toast.makeText(上下文,“谢谢”,Toast.LENGTH_SHORT).show();
}
@凌驾
公共无效onPermissionDenied(PermissionDeniedResponse响应){
Toast.makeText(上下文“请给予事先许可”,Toast.LENGTH_SHORT.show();
}
@凌驾
public void on PermissionRational应显示(PermissionRequest权限、PermissionToken令牌){
}
}).检查();
上下文=这个;
最终适配器=新适配器(上下文,列表);
rec_view=findviewbyd(R.id.rec_图像);
rec_view.setAdapter(适配器);
rec_view.setLayoutManager(新的LinearLayoutManager(此,LinearLayoutManager.VERTICAL,false));
btn=findViewById(R.id.loadimage);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(意向.行动\u选择,
android.provider.MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI);
startActivityForResult(意向,0);
Cursor=database.Cursor();
对于(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){
模型=新模型();
model.setPath(cursor.getString(1));
列表。添加(模型);
adaptor.notifyDataSetChanged();
startActivity(新意图(getApplicationContext(),MainActivity.class));
}
}
});
}
@凌驾
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==结果_确定){
Uri tartgeturi=data.getData();
String directory=String.valueOf(tartgeturi);
插入(目录);
}
}
}
我希望我的回收器视图正确显示图片

Picasso
            .with(context)
            .load(model.getpath())
            .into(viewHolder.img);
从uri设置图像代码替换为此代码。但是在你的画册里加上毕加索

    implementation 'com.squareup.picasso:picasso:2.5.2'
你可以用两种方法来做 1.给出您下载的图像的本地路径,如下图所示

String imgPath = Environment.getExternalStorageDirectory() + "/dir_name"+ fileName;
在科特林

val imgPath = Environment.getExternalStorageDirectory() + "/dir_name"+ fileName;
然后

我用过glide你也可以用毕加索

  • 将其转换为位图并设置为imageview

  • 使用像Glide和Picasso这样的图像加载库,我希望它离线检查您的模型;值在日志上打印它不应该为null或为空实际上我认为我的路径有问题,它没有保存在数据库中
    val imgPath = Environment.getExternalStorageDirectory() + "/dir_name"+ fileName;
    
    Glide.with(mContext).load(imgPath).into(profileAvatar);
    
        File myimgFile = new File("path to you image");
        Bitmap imgbitmap = BitmapFactory.decodeFile(myimgFile.getAbsolutePath()
        view.setImageBitmap(imgbitmap)