-1
votes

Enregistrer des données de spinner et l'afficher plus loin sans demander à nouveau

Je suis vraiment nouveau à Android, alors excuses s'il y a des erreurs vraiment stupides. Aussi, j'ai cherché de nombreuses réponses sur ce sujet mais n'a pas trouvé la solution appropriée.

Ce que je veux faire, c'est accepter l'entrée de l'utilisateur une seule fois lors de la connexion, puis de la prochaine démarrage de l'application doit passer directement à la page suivante sans demander à nouveau aux valeurs de la filatrice. p>

Voici le code jusqu'à présent - P>

    ArrayAdapter<String> br = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, branchEnt);
    br.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    branch.setAdapter(br);
    branch.setOnItemSelectedListener(this);

    ArrayAdapter<String> yr = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, yearEnt);
    yr.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    year.setAdapter(yr);
    year.setOnItemSelectedListener(this);

    proceed.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(DetailsActivity.this,ProfileActivity.class);

            intent.putExtra("branch",String.valueOf(branch.getSelectedItem()));
            intent.putExtra("year",String.valueOf(year.getSelectedItem()));
            startActivity(intent);
        }
    });
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}  


1 commentaires

Vous devez enregistrer les données lorsque l'utilisateur se connecte dans la première fois, puis récupérer les données lors de la journalisation à nouveau pour vérifier si elle existe et procédez. Vérifiez @karthic Réponse, nice; +1 de moi.


3 Réponses :


1
votes

Utilisez des préférences partagées pour enregistrer les données, puis sur le démarrage Utilisez une instruction IF pour déterminer si l'utilisateur doit le remplir.


0 commentaires

1
votes

Nous avons un concept appelé Préférences partagées CODE> dans Android où vous pouvez enregistrer des données dans votre application qui sera disponible sur toutes les activités de votre application. Pour créer un fichier de préférence partagé, copiez le code ci-dessous sur votre classe principale ci-dessus oncreate () code> méthode comme ceci: xxx pré>

Ceci créera un fichier de préférences partagé avec le Nom myPraf code>. Maintenant, vous pouvez remplir les valeurs de clé telles que ci-dessous: p> xxx pré>

ceci stockera branche code> et an code> variables dans le fichier de préférences partagées 'myPref' p>

Maintenant, chaque fois que votre activité se lance, vous devez vérifier si une valeur est stockée pour ces variables dans MyPRef code> dans le Oncreate () Code> méthode comme ceci: p> xxx pré>

si branche code> et Année code> contient toutes les valeurs, vous pouvez écrire votre logique en conséquence. P>

Vous pouvez en savoir plus sur la préférence partagée ici

espère que cela aide :) p>

EDIT 1: strong> p>

On cliquez sur lismetteur pour le bouton qui postera les données de la préférence partagée que Sera disponible à l'activité suivante: P>

public class FirstActivity extends AppCompatActivity {

    SharedPreferences sharedpreferences;
    public static final String mypreference = "mypref";

    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // This will open shared preference file and load variables "year" and "branch"
        sharedpreferences = this.getSharedPreferences("mypref", 0);
        String branchstring = sharedpreferences.getString("branch", "0");
        String yearstring = sharedpreferences.getString("year", "0");

        // This will check if the variables hold data. If so, it will send the control to Secondactivity
        if ((branchstring == "0") || (yearstring == "0"){

            Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
            startActivity(aboutusintent);

        } else {

            // If those variables dont have values, your FirstActivity will load
            setContentView(R.layout.activity_about_us);

        }

        // Here, you will get selected values from spinners and populate shared preference file.
        // Remember I didn't included the code to map spinners, which you need to do here. Otherwise "branch" and "year" will throw error.

        sharedpreferences = this.getSharedPreferences("mypref", 0);
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString("branch", String.valueOf(branch.getSelectedItem())); // branch is the spinner
        editor.putString("year", String.valueOf(year.getSelectedItem())); // year is the spinner
        editor.apply();
}


12 commentaires

J'ai édité mon code comme indiqué par vous vient de remplacer "getactivité ()" avec "ceci". Je passe la «branche» des cordes et la "année" comme putextra () à travers mon intention de la prochaine activité. Mais pourtant, l'application demande des valeurs de spinner lorsqu'elle est fermée et ouverte à nouveau. Comment cela peut-il être résolu?


Vous devez vérifier le fichier de préférences partagé dans la méthode Oncreate () de votre activité. S'il vous plaît vérifier ma réponse mise à jour.


Dois-je modifier la valeur de "valeur par défaut" dans la «branche» et «année» des chaînes ??


Si la valeur correspondante n'est pas déjà stockée dans la variable, le système prendra valeur par défaut . Vous n'avez pas besoin de changer cela pour l'instant. Si vous avez une branche et une année par défaut par défaut, vous pouvez la mettre ici.


Et par "classe principale" dans la première partie du code, vous voulez dire l'activité actuelle?


Pouvez-vous s'il vous plaît aidez-moi avec les fonctions à écrire dans l'ONCLICKLISTENER du bouton par lequel je peux envoyer les données à l'activité suivante par l'intention.


S'il vous plaît vérifier ma réponse mise à jour. Et oui la classe principale signifie l'activité actuelle.


J'ai édité le code selon votre édition Bien que je devais écrire 'SharedPreferences = getSharedPreferences ("myPref", 0); au lieu de 'SharedPrreferences = cela.getSharedPrèves ("myPraf", 0);' Mais cela ne fonctionne toujours pas. Je veux dire que l'acaitivty ne fait pas apparaître et même après avoir passé les valeurs qui montrent NULL comme la sortie.


Checkout mon édition 2


Pourquoi existe-t-il "0" correspondant à la branche et à l'année de la chaîne? Parce que sa donnant une exception de pointeur nulle pour elle et que l'activité se bloque et une fois que l'activité suivante est tirée, elle montre la valeur 0,0 pour les fileurs.


"0" est la valeur par défaut pour les deux variables. Les moyens, s'il n'y a pas de valeur trouvée dans le fichier Pref partagé, le système assignera "0" aux deux variables par défaut. Vous pouvez mettre n'importe quelle valeur que vous voulez là-bas par défaut. Pouvez-vous attacher la trace de LogCat pour déboguer le crash?


Je ne connais pas l'erreur spécifiquement, je pense que c'était à cause d'une autre déclaration. Quoi qu'il en soit, j'ai compris comment cela doit être fait correctement. Ma candidature fonctionne complètement et recherchée. Merci pour votre temps et votre aide.



0
votes

Voici un moyen simple dans lequel vous pouvez enregistrer vos données de Spinner dans SharedPreferences. Le code suivant enregistre des valeurs de Spinner dans des préférences partagées xxx pré>

pour afficher la valeur de SharedPreferences sur toute autre activité, effectuez simplement les éléments suivants: P>

SharedPreferences sharedpreferences = getSharedPreferences("PREFERENCES",MODE_PRIVATE);
String branch = sharedpreferences.getString("branch","");
String year = sharedpreferences.getString("year","");


0 commentaires