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 :
La ligne concernée est :
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)
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
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; }
Lors du premier chargement cela fonctionne mais si je change d'orientation j'ai le null pointer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public class FullSizeAdapter extends PagerAdapter
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 :
J'aimerais pouvoir récupérer le contenu du tableau String[]images lors de changement d'orientation du téléphone, tout simplement.
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); } }
Pouvez-vous m'aider svp ?
Partager