Java 回收器视图不显示图片
我正在创建一个显示用户提供给它的图像的回收器视图,我获取图片目录,然后创建一个文件,然后从文件中创建一个位图,并将其设置为我的图像视图。但当用户选择图片时,recycer view不会显示它 我使用了权限和dexter库,但它不起作用 我的适配器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<
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你也可以用毕加索
使用像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)