Question

J'ai créé une application d'enregistrement de données rudimentaire, qui est censée permettre à l'utilisateur de saisir des valeurs dans un nombre dynamique et souvent important de vues EditText.Une fois que l'utilisateur a fini de saisir toutes les données, il peut appuyer sur un bouton qui prend une photo de la saisie des données (attention au stockage de la saisie sous forme d'image, il y a des raisons spécifiques à cela) et enregistre l'image dans le stockage. .

Problème:Cela fonctionne très bien, sauf pour un problème particulier.Parfois, lorsque l'utilisateur met le téléphone en veille (ce qui se produit fréquemment avant que l'entrée ne soit réellement enregistrée), toutes les entrées dans les vues EditText seront effacées (ce qui fait de moi une personne très en colère/triste).De plus, cela ne se produit que lorsque je suis sur le terrain et que je suis incapable de consulter les fichiers journaux dans Eclipse pour déterminer quelles méthodes pourraient être appelées différemment de la normale.

Question:Pourquoi les valeurs de mes EditTexts persistent-elles la plupart du temps lorsque le téléphone passe et revient du mode veille, alors qu'elles s'effacent à des occasions apparemment aléatoires (et souvent gênantes) ?

J'ai le sentiment que cela est dû au fait que onStop() est appelé à la place de onPause() (ou peut-être vice versa) à certaines occasions, mais ma connaissance de ces méthodes n'est pas encore tout à fait à jour.De plus, je suis conscient que ce problème pourrait être résolu via un fichier sharedPreferences (ou une idée similaire), mais j'aimerais savoir ce qui se passe pour mieux comprendre plus que toute autre chose.

Détails:

-Je ne sais pas si l'un de ces codes pourrait être pertinent à la question de manière significative, mais j'inclurai un extrait de ma méthode onCreate() si cela peut aider.Faites-moi savoir si je dois ajouter autre chose :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input_param);

    Intent intent = getIntent();
//Rest of the code just builds the layout from data taken from the intent

-Je n'ai remplacé aucune des méthodes de cycle de vie (c'est-à-direonStop(), onResume(), etc.) sauf onCreate().Aucune des autres méthodes de mon activité ne devrait avoir quoi que ce soit à voir avec le problème/pour autant que je sache

Était-ce utile?

La solution

Je crois que le problème est que parfois, lorsque votre application devient "inactive" (c'est-à-direen arrière-plan, écran éteint) qu'Android le nettoie automatiquement et détruit toutes les données, y compris celles de votre EditTexts.

Si une activité est mise en pause ou arrêtée, le système peut supprimer l'activité de la mémoire en lui demandant de la terminer ou en interrompant simplement son processus.Lorsqu'il est à nouveau affiché à l'utilisateur, il doit être complètement redémarré et restauré à son état précédent.

http://developer.android.com/reference/android/app/Activity.html

Pour résoudre ce problème, vous pouvez remplacer le onSavedInstanceState() méthode pour enregistrer votre EditText valeurs et ensuite onCreate() récupérera ces valeurs lorsque vous reviendrez à l'activité.Vous aurez alors besoin d'une vérification pour voir si vous devez repeupler votre EditTexts à partir de ces valeurs ou si elles étaient nulles.Plus à ce sujet ici.

Autres conseils

Cela se produit probablement de la méthode OnDestroy ou Onpause est appelé dans le temps de ralenti.L'Ondestroy serait appelé en cased La mémoire est l'utilisation de l'application.La seule solution à mon avis est de sauvegarder des données dans une DB locale au fur et à mesure de son entrée, et de le peupler l'onResume.

Pour résoudre votre problème dans Onpaause () La méthode de votre activité Prenez les valeurs insérées par l'utilisateur dans les variables statiques (vous aurez besoin du nombre de variables combien d'EditText vous avez) et de stocker les valeurs dans des variables et dans ONRESUME () remettre les valeurs sur editext.

package com.zeus.program;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;

public class MainActivity extends Activity {

    public static String username;
    public static String password;


    EditText usernameET;
    EditText passwordET;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        usernameET = findViewById(R.id.username);
        passwordET = findViewById(R.id.password);
    }


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        usernameET.setText(username);
        passwordET.setText(password);

    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();

        username = usernameET.getText().toString();
        password = passwordET.getText().toString();

    }   
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top