bonsoir, je suis un nouveau dans la programmation android et besoin d'afficher toutes les images du telephone dans mon application avec recyclerView

--Adapter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageHolder> {
 
    private Context context;
    private List<Images> list;
 
    public ImageAdapter(Context context, List<Images> list) {
        this.context = context;
        this.list = list;
    }
 
    @Override
    public ImageAdapter.ImageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_recycler,parent,false);
        return new ImageHolder(view);
    }
 
    @Override
    public void onBindViewHolder(ImageAdapter.ImageHolder holder, int position) {
            Images images = list.get(position);
 
        String data = images.getData();
        Uri dataUri = Uri.parse("file://" + data);
        try {
            Bitmap bitmap = Glide.with(context)
                      .load(dataUri)
                      .asBitmap()
                      .into(100,100)
                      .get();
            if (bitmap != null) {
                holder.imageView.setImageBitmap(bitmap);
            }else {
                Toast.makeText(context,"vide",Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    @Override
    public int getItemCount() {
        return list.size();
    }
 
    public class ImageHolder extends RecyclerView.ViewHolder{
        public ImageView imageView;
        public ImageHolder(View itemView) {
            super(itemView);
 
            imageView = itemView.findViewById(R.id.imageView);
        }
    }
}
--ImageClass

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
public class Images {
 
    private String data;
 
 
    public Images() {
    }
 
    public Images(String data) {
        this.data = data;
    }
 
    public String getData() {
        return data;
    }
 
    public void setData(String data) {
        this.data = data;
    }
}
---MainActivity
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
public class MainActivity extends AppCompatActivity {
 
    private static final int MY_READ_PERMISSION = 123;
    private List<Images> listImages = new ArrayList<>();
    RecyclerView recyclerView;
    RecyclerView.Adapter adapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        recyclerView.setLayoutManager(new GridLayoutManager(this,3));
    }
 
    public ArrayList<Images> getImages()  {
        ArrayList<Images> imageArrayList = new ArrayList<>();
        Cursor cursor = null;
        try {
             cursor = this.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
            int dataIndex  = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            do {
 
                Images img = new Images();
                String dataString = cursor.getString(dataIndex);
 
                img.setData(dataString);
                imageArrayList.add(img);
            }while (cursor.moveToNext());
 
        }catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
        // Close the curosor
        cursor.close();
        return imageArrayList;
    }
 
    public  void showImage() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_READ_PERMISSION);
            //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method
 
        } else {
            listImages = getImages();
            adapter = new ImageAdapter(this,listImages);
            recyclerView.setAdapter(adapter);
 
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions,
                                           int[] grantResults) {
        if (requestCode == MY_READ_PERMISSION) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Permission accordée
                showImage();
            } else {
                Toast.makeText(this, "Permission non accordée", Toast.LENGTH_LONG).show();
            }
        }
    }
}