Lorsque je tourne mon smartphone l'appli plante

Fermé
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 - Modifié le 25 juil. 2021 à 12:35
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 26 juil. 2021 à 09:52
Bonjour,

Je code une petite appli de gestion de congélateur.
Aucune erreur ni dans build ni dans logcat.
Pourtant lorsque je mets l'affichage à l'horizontal mon appli plante.
Dès que je clique sur OK l'appli continue.

Mon code du fichier Mafiche.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="fill_parent"
android:layout_height="30dp"
android:layout_marginStart="1dp"
android:layout_marginLeft="1dp"
android:layout_marginTop="1dp"
android:layout_marginEnd="1dp"
android:layout_marginRight="1dp"
android:orientation="horizontal"
android:weightSum="5"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ExtraText,MissingConstraints"> <!-- nombre de colonnes -->


<TextView
android:id="@+id/textView_type"
android:layout_width="65dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/types"
android:textColor="#E91E63"
android:textStyle="bold" />

<TextView
android:id="@+id/textView_nom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/noms"
android:textColor="#E91E63"
android:textStyle="bold" />

<TextView
android:id="@+id/textView_etat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/dates"
android:textColor="#E91E63"
android:textStyle="bold" />

<TextView
android:id="@+id/textView_nombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/nombres"
android:textColor="#E91E63"
android:textStyle="bold" />

<TextView
android:id="@+id/textViewe_endroit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginLeft="32dp"
android:layout_marginTop="8dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/endroits"
android:textColor="#E91E63"
android:textStyle="bold" />

</LinearLayout>

<ListView
android:id="@+id/Fiche_liste"
android:layout_width="match_parent"
android:layout_height="360dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:listSelector="#FFFF00"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout">

</ListView>

<Spinner
android:id="@+id/spinner6"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:listSelector="#FFFF00"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textEndroit" />

<TextView
android:id="@+id/textEndroit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="10dp"
android:text="@string/modifiez_l_endroit_et_ou_la_quantit"
android:textColor="#E91E63"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/Fiche_liste" />

<Spinner
android:id="@+id/spinner7"
android:layout_width="110dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
app:layout_constraintStart_toEndOf="@+id/spinner6"
app:layout_constraintTop_toBottomOf="@+id/textEndroit" />

<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="24dp"
android:text="@string/retour_la_liste"
android:textColor="#22427C"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintStart_toEndOf="@+id/spinner3"
app:layout_constraintTop_toBottomOf="@+id/spinner7" />

<Spinner
android:id="@+id/spinner3"
android:layout_width="160dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/spinner6" />

</androidx.constraintlayout.widget.ConstraintLayout>


Mon code du fichier Mafich_viande.java

package com.example.sqlitedatabase;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class Mafich_viande extends Activity implements AdapterView.OnItemLongClickListener{

SQLiteDataBaseHelper db; // déclaration de l'objet db

//déclaration tableaux pour spinner3
String[] nombreChanger = {"0","1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
"13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"};

String[] endroitChangement = {"Gauche-bas", "Gauche-haut", "Milieu-bas", "Milieu-haut", "Droite-bas", "Droite-haut",
"Dessus", "Compartiment", "Panier gauche", "Panier droite", "Tiroir1", "Tiroir2", "Tiroir3", "Tiroir4", "Tiroir5", "Tiroir6",
"Tiroir7", "Bac gauche", "Bac droite",};

String [] choix_congelateur = {"Cave1", "Cave2", "Cuisine1", "Cuisine2", "Garage1", "Garage2",
"Debarras1", "Debarras2"};

//déclaration variable de classe pour changer la quantité ou le nombre
public static String varChange6;
public static String varModifEndroit6;

//déclaration des objets widget
private Spinner entreNombre;
private Button retourAccueil;
private Spinner choix_Endroit;
private Spinner choix_congel;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fiche);

db = new SQLiteDataBaseHelper(this);

final ListView lv = this.findViewById(R.id.Fiche_liste);

// récupération des différents widgets
entreNombre = (Spinner)findViewById(R.id.spinner7);
retourAccueil = (Button)findViewById(R.id.button4);
choix_Endroit = (Spinner)findViewById(R.id.spinner6);
choix_congel = (Spinner)findViewById(R.id.spinner3);

//créer le ArrayAdapter instance concernant le changement du nombre de produits
ArrayAdapter<String> adapter5 = new ArrayAdapter<>(this,R.layout.spinner_item, endroitChangement);
adapter5.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
choix_Endroit.setAdapter(adapter5);

//créer le ArrayAdapter instance concernant le changement d'endroit des produits
ArrayAdapter<String> adapter6 = new ArrayAdapter<>(this, R.layout.spinner_item, nombreChanger);
adapter6.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
entreNombre.setAdapter(adapter6);

//créer le ArrayAdapter instance concernant le changement de congélateur
ArrayAdapter<String> adapter7 = new ArrayAdapter<>(this, R.layout.spinner_item, choix_congelateur);
adapter7.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
choix_congel.setAdapter(adapter7);

//*************mise en page du toast********************
Context context = getApplicationContext();
CharSequence text = " ATTENTION MODIFIER soit la Quantité ou l'Endroit même les 2 à la fois ";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.setGravity(Gravity.TOP|Gravity.LEFT, 40, 800);
toast.show();

lv.setOnItemLongClickListener(this);//permet la modification par click sur ligne

//méthode pour revenir la à la liste de départ application
//écouteur sur le bouton
retourAccueil.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//lancement de l'activité AccueilDatabase
Intent intent;
intent = new Intent(getBaseContext(), AccueilDatabase.class); //appel de la classe
startActivity(intent); //lancement de l'appel
}
});

Cursor data = db.selection_Viande();

// création de l'objet SimpleCursorAdapter...
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row_item, data, new String[]
{"TYPE", "NOM", "DATE", "NOMBRE", "ENDROIT"}, new int[]{R.id.textViewCol1, R.id.textViewCol2,
R.id.textViewCol3, R.id.textViewCol4, R.id.textViewCol5});
lv.setAdapter(adapter);

} //fin de onCrerate

@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, final long id) {
final AlertDialog.Builder modifAlert = new AlertDialog.Builder(this);
modifAlert.setTitle("Vous pouvez modifier la quantité ou l'endroit");
modifAlert.setMessage("ATTENTION choisir: QUANTITE ou ENDROIT !" );
modifAlert.setPositiveButton("QUANTITE", null);
modifAlert.setNegativeButton("ENDROIT", null);

modifAlert.setPositiveButton("Quantité", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
varChange6 = entreNombre.getSelectedItem().toString();//initialisation de la variable de classe
db.modif_Ligne6(id);
Toast.makeText(getApplicationContext(), "OK la quantité est modifiée", Toast.LENGTH_SHORT).show();
}
});

modifAlert.setNegativeButton("Endroit", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
varModifEndroit6 = choix_Endroit.getSelectedItem().toString();//initialisation de la variable de classe
db.modif_Endroit6(id);
Toast.makeText(getApplicationContext(), "OK l'endroit est modifié", Toast.LENGTH_SHORT).show();

}
});

modifAlert.create().show();
return false;
}

} // fin de la classe MaFiche_viande


Après plusieurs tests pour trouver l'erreur
voici la partie qui pose problème:
Lorsque je mets cette partie en commentaire tout redevient normal et j'obtient l'affichage horizontal
En voici l'extrait du code

        //créer le ArrayAdapter instance concernant le changement de congélateur
ArrayAdapter<String> adapter7 = new ArrayAdapter<>(this, R.layout.spinner_item, choix_congelateur);
adapter7.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
choix_congel.setAdapter(adapter7);


Merci de bien vouloir m'aider
Très cordialement
a+++
rapidegoyes




Configuration: Windows / Firefox 90.0
A voir également:

1 réponse

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
26 juil. 2021 à 09:52
Hello (ça faisait longtemp ;)),

Le crash au changement d'orientation, c'est une erreur assez "commune"...
Il faut que tu sauvegarde l'état de ton écran/données via la SavedInstance.

https://developer.android.com/guide/topics/resources/runtime-changes
0