Bonjour,

J'ai ce problème qui je pense est assez courant mais je n'arrive pas à trouver le cas qui me concerne.

J'ai fait une galerie image à partir d'une URL comme source.

J'ai l'erreur suivante lorsque je fais un changement d'orientation de téléphone :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
2021-02-12 13:11:01.475 8184-8184/fr.***.onlinegallery E/AndroidRuntime: FATAL EXCEPTION: main
    Process: fr.***.onlinegallery, PID: 8184
    java.lang.NullPointerException: Attempt to read from null array
        at fr.top.onlinegallery.Adapters.FullSizeAdapter.instantiateItem(FullSizeAdapter.java:57)
La ligne concernée est :

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
@NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {

        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflater.inflate(R.layout.full_item, null);

        ImageView imageView = (ImageView)v.findViewById(R.id.img);
       // if(images != null) {

            //Problème ici car au changement d'orientation l'objet String[] images est null !
            Glide.with(context).load(images[position]).apply(new RequestOptions().centerInside()).into(imageView);


       // }
        ViewPager vp = (ViewPager)container;
        vp.addView(v,0);

        return v;
    }
Problème ici car au changement d'orientation l'objet String[] images est null ! je vous précise le type de ma class qui est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
public class FullSizeAdapter extends PagerAdapter
Lors du premier chargement cela fonctionne mais si je change d'orientation j'ai le null pointer.

J'ai vue qu'il fallait passer par une méthode onSaveInstanceState :

Mais je ne vois pas trop comment je dois m'y prendre car ma classe contenant le remplissage du tableau String[]images est celle-ci :

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
 
package fr.***.onlinegallery.Activities;
 
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
 
import java.io.Serializable;
import java.util.Random;
 
import fr.***.onlinegallery.Adapters.GalleryImageAdapter;
import fr.***.onlinegallery.Interfaces.IRecyclerViewClickListener;
import fr.***.onlinegallery.R;
 
public class GalleryActivity extends Activity implements Serializable {
 
    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView)findViewById(R.id.recyclerview);
        layoutManager = new GridLayoutManager(this,2);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(layoutManager);
 
 
        Random random = new Random();
 
        final String[] images = new String[5];
 
        for(int i=0; i< images.length;i++){
            if(i>0)
            images[i] = "https://***/"+i+".jpg";//random.nextInt(1000+1);
        }
 
        final IRecyclerViewClickListener listener = new IRecyclerViewClickListener() {
            @Override
            public void onClick(View view, int position) {
                // open full screen activity with image clicked
                Intent intent = new Intent(getApplicationContext(), FullScreenActivity.class);
                intent.putExtra("IMAGES", images);
                intent.putExtra("POSITION", position);
                GalleryActivity.this.startActivity(intent);
            }
        };
 
        GalleryImageAdapter galleryImageAdapter = new GalleryImageAdapter(this,images,listener);
        recyclerView.setAdapter(galleryImageAdapter);
 
    }
 
    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putAll(outState);
    }
}
J'aimerais pouvoir récupérer le contenu du tableau String[]images lors de changement d'orientation du téléphone, tout simplement.
Pouvez-vous m'aider svp ?