[ERLEDIGT] Daten/Code meiner App speichern?

S

Sonniger

Neues Mitglied
0
Hallo,
ich würde gerne wissen, wie ich meinen Code abspeichern kann, sodass wenn man die App komplett schließt und wieder öffnet so wieder findet wie man die App geschlossen hat(wenn möglich ohne "Laden" Button).
Das ist mein Code der gespeichert werden soll:
Code:
package s_cube.de.project;

import android.app.AlertDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Pass extends AppCompatActivity implements View.OnClickListener {

    private Button btn1;
    private EditText text1;

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

        btn1 = (Button) findViewById(R.id.button);
        btn1.setOnClickListener(this);

        text1 = (EditText) findViewById(R.id.editText);
        text1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    }
    public void onClick (View view){
        if (text1.getText().toString().equals("pass")){
            AlertDialog ad = new AlertDialog.Builder(this).create();
            ad.setMessage("Super");
            ad.show();
            Intent intent = new Intent(this,Popup.class);
            startActivity(intent);
            btn1.setEnabled(false);
        }else{
            String message = "Leider falsch";
            Toast.makeText(this,message, Toast.LENGTH_LONG).show();
        }

    }

}
Wichtig ist die Zeile die gespeichert werden soll:
Code:
 btn1.setEnabled(false);
Ich habe mir bereits was über Shared Preferences angeschaut, hat mir aber nicht wirklich weiter geholfen.
Ich hoffe ihr könnt mir helfen.

MfG

Sonniger
 
Hallo Sonniger,

du schweigst dich leider darüber aus , was für Werte du speichern möchtest.
Und "Code" kann man zur Laufzeit nicht speichern

Die SharedPreferences Funktionen sind schon das Richtige.
Ordentlich kann man es allerdings mit SQLite machen
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lordzwieback
Moin, ich geb auch mal meinen Senf dazu :)

Sehe das Ähnlich wie swa. Wenn du nur ein paar Angaben speichern möchtest, kannst du die SharedPreferences verwenden. Wenn es etwas umfangreicher wird vom Datenbestand her würde ich dir auch zu einer SQLite DB raten. Wenn du dich da mal durchwuseln möchtest, hab ich hier mal einen Link für dich: Android SQLite Datenbank Tutorial – Teil 1: Android SQLite Projekt in Android Studio anlegen

Die SharedPreferences sind auch nicht so schwer zu verstehen, das ganze funktioniert ungefähr so:
Code:
// Daten reingeben
SharedPreferences preferences = getSharedPreferences("myPreferences", 0) // Objekt erstellen und ID angeben
SharedPreferences.Editor editor = preferences.edit(); // Editorobjekt erstellen (um auf Preferences zuzugreifen)
editor.putString("hierIDeinfügen", objekt.getText().toString()); // Daten übergeben
editor.commit() // Abspeichern


// Daten wieder rausholen
SharedPreferences holMirWerte = getSharedPreferences("myPreferences", 0);
meinStringWert = holMirWerte.getString("hierIDeinfügen", ""); // Daten woanders wieder auslesen

Funktioniert dann natürlich auch mit putInt, getInt, putBoolean, getBoolean usw...

Aber wie gesagt, würde ich nur nutzen, wenn du weißt, es werden nicht ewig viele Daten. Ich nutze es zB zum Speichern von Zugangsdaten für einen Server (Hostadresse, Standardordnerpfad, Benutzername).

Viel Spaß beim Testen ^^
 
Okay, vielen Dank, hilft mir aber nicht weiter, weil ich die Fehlermeldung bekomme das ich keine "void" einfügen darf.
 
Zuletzt bearbeitet:
Wahrscheinlich möchtest du dir den
Code:
boolean
Wert speichern, der das enabled flag setzt, richtig?

Wie mein vorherige Poster schon erwähnte. SharedPreferences sind hier angebracht.

Den wert kannst du speicher mit:
Code:
getSharedPreferences("myPreferences", Context.MODE_PRIVATE).edit().putBoolean("enabledState", enabledStateVar).apply()

Bevor du nun beim nächsten mal
Code:
setEnabled(boolean)
sagst, musst du den wert aus den Preferences wieder rauslesen. Beim erstmal (da natürlich noch kein Wert vorhanden ist) musst du dir einen default Wert ausdenken.

Code:
final boolean enabledState = getSharedPreferences("myPreferences", Context.MODE_PRIVATE).getBoolean("enabledState", defaultEnabledState)
Nun kannst du den
Code:
enabledState
nutzen und ihn setzten:
Code:
btn1.setEnabled(enabledState);
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lordzwieback und swa00
Hallo Sonniger,

an deiner Antwort gebiete ich es mir herauszuhören, dass dir noch Grundlagen in der Java-Entwicklung fehlen.
Vielleicht solltest du da nochmal drüber schauen.
 
  • Danke
Reaktionen: lordzwieback
Hallo,
danke für die Antworten.
Das ist jetzt mein Code, aber irgendwas mache ich immer noch falsch.
Code:
package s_cube.de.project;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Pass extends AppCompatActivity implements View.OnClickListener {

    private Button btn1;
    private EditText text1;

    SharedPreferences spref;
    SharedPreferences.Editor sprefeditor;

    boolean enabledStateVar, defaultEnabledState;
    final boolean enabledState = getSharedPreferences("spref", Context.MODE_PRIVATE).getBoolean("enabledState", defaultEnabledState);

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

        btn1 = (Button) findViewById(R.id.button);
        btn1.setOnClickListener(this);

        text1 = (EditText) findViewById(R.id.editText);
        text1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);



    }


    public void onClick (View view){
        if (text1.getText().toString().equals("pass")){
            AlertDialog ad = new AlertDialog.Builder(this).create();
            ad.setMessage("Super");
            ad.show();
            Intent intent = new Intent(this,Popup.class);
            startActivity(intent);
            btn1.setEnabled(enabledState);

            spref = this.getSharedPreferences("sprefdatei", Context.MODE_PRIVATE).edit().putBoolean("enabledState",enabledStateVar).apply();
            sprefeditor.commit();

        }else{
            String message = "Leider falsch";
            Toast.makeText(this,message, Toast.LENGTH_LONG).show();
        }

    }

}
Ich bekomme immer noch die Fehlermeldung:
Incompatible types.
Required: android.content.SharedPreferences
Found: void
Bei der Zeile:
Code:
spref = this.getSharedPreferences("sprefdatei", Context.MODE_PRIVATE).edit().putBoolean("enabledState",enabledStateVar).apply();

MfG

Sonniger
 
Du möchtest doch nur den momentanen Status deiner Boolean speichern.

SPEICHERN
Code:
// SPEICHERN DEINER BOOLEAN
SharedPreferences shpref = getSharedPreferences("SP_ID", 0);
SharedPreferences.Editor editor = shpref.edit();

if (checkbox.isChecked) {
    editor.putBoolean("deine_id_hier", true);
} else {
    editor.putBoolean("deine_id_hier", false);
}
editor.commit();

SETZEN
Code:
// SETZEN DEINES WERTES AUS DER PREFERENCE HERAUS
SharedPreferences shpref = getSharedPreferences("SP_ID", 0);
checkbox.setChecked(shpref.getBoolean("deine_id_hier", false));

@StefMa
StefMa schrieb:
musst du den wert aus den Preferences wieder rauslesen. Beim erstmal (da natürlich noch kein Wert vorhanden ist) musst du dir einen default Wert ausdenken.
Wieso braucht er einen Standardwert? Meines Wissens nach funktioniert das so:
Zum Setzen des Wertes: Der Wert hinter dem Komma stellt den Standardwert dar, der eingesetzt werden würde, wenn hier kein Wert in der Preference festgelegt ist. Das funktioniert auch prima bei mir in einer meiner Apps. In diesem Fall wäre der Wert false, wenn vorher noch keine Auswahl getroffen wurde.
 
Hallo,
tut mir leid, aber jetzt habe ich den Überblick verloren. Soll ich den Code von StefMa oder lordzwieback verwenden, oder muss ich beide Codes verwenden?
Danke

MfG

Sonniger
 
Prinzipiell sind beide Techniken gleich. Nur die Schreibweise unterscheidet sich.
Das Ergebnis ist - richtig angewendet - das Selbe.

Nimm mir das nicht übel, aber ich würde dir empfehlen, Dich nochmal mit den Grundlagen auseinanderzusetzen.

Die Lösung wurde nämlich quasi 3x gepostet.
 
Zuletzt bearbeitet von einem Moderator:
Bearbeitet von: swa00 - Grund: Die Kuh an Schanz am Raus am Ziehn :-)
  • Danke
Reaktionen: swa00
Code:
spref = this.getSharedPreferences("sprefdatei", Context.MODE_PRIVATE).edit().putBoolean("enabledState",enabledStateVar).apply();
Habe ich geschrieben, dass hier etwas zurück gegeben wird? Nein :)
Somit mit dieser Zeile code
Code:
this.getSharedPreferences("sprefdatei", Context.MODE_PRIVATE).edit().putBoolean("enabledState",enabledStateVar).apply();
alles gemacht.
Erst holt er sich die Preferences. Holt sich daraus den Editor. Setzt den boolean in den Editor und speichert es final mit apply().

Wieso braucht er einen Standardwert? Meines Wissens nach funktioniert das so:
Zum Setzen des Wertes: Der Wert hinter dem Komma stellt den Standardwert dar, der eingesetzt werden würde, wenn hier kein Wert in der Preference festgelegt ist. Das funktioniert auch prima bei mir in einer meiner Apps. In diesem Fall wäre der Wert false, wenn vorher noch keine Auswahl getroffen wurde.
Ich verstehe deine frage nicht genau.
Aber du hast auch einen standard wert ;)
Code:
shpref.getBoolean("deine_id_hier", false)
in dem fall false...

Ich meinte damit eigentlich nur folgendes:
Die App wird beim aller ersten Mal geöffnet. Wir lesen aus den Preferences raus und dort ist nichts drin (weil wir ja noch nichts gespeichert haben).
Ergo müssen wir von Anfang an einen default wert haben, was der Button für einen enabled state haben soll.

Oder andersrum.
Selbst wenn man beim aller ersten start erst in die Preferences speichert - und somit get* nie "null" zurückgeben kann - brauch man hier einen default wert :)
 
  • Danke
Reaktionen: swa00
Hallo,
danke für die Antworten, soweit habe ich alles verstanden, aber wenn ich das Activity im Emulator starten möchte stürzt der Emulator ab.
Code:
package s_cube.de.project;

import android.app.AlertDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class Pass extends AppCompatActivity implements View.OnClickListener {

    private Button btn1;
    private EditText text1;

    SharedPreferences shpref = getSharedPreferences("SP_ID", 0);
    SharedPreferences.Editor editor = shpref.edit();

    final String enabled = "enabled";

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

        btn1 = (Button) findViewById(R.id.button);
        btn1.setOnClickListener(this);

        text1 = (EditText) findViewById(R.id.editText);
        text1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);


        SharedPreferences shpref = getSharedPreferences("SP_ID", 0);
        shpref.getBoolean(enabled,false);
    }


    public void onClick (View view){
        if (text1.getText().toString().equals("pass")){
            AlertDialog ad = new AlertDialog.Builder(this).create();
            ad.setMessage("Super");
            ad.show();
            Intent intent = new Intent(this,Popup.class);
            startActivity(intent);
            btn1.setEnabled(false);

            editor.putBoolean(enabled, false);
        }else{
            String message = "Leider falsch";
            Toast.makeText(this,message, Toast.LENGTH_LONG).show();
            editor.putBoolean(enabled, true);
        }
            editor.commit();
    }

}
MfG

Sonniger
 
Dann bitten wir um den ErrorLog zum obigen Source

Warum machst du denn mehrere Instanzen zu den Shares ?
Hat das einen Grund ?
 
Und der Quizmaster sagt die folgenden member crashen:
Code:
   SharedPreferences shpref = getSharedPreferences("SP_ID", 0);
   SharedPreferences.Editor editor = shpref.edit();

Ich glaube es ist nicht save getSharedPreferences vor onCreate aufzurufen...
 
  • Danke
Reaktionen: lordzwieback und swa00
Danke StefMa ( bist ja heute schnell) :)

Ich muss Dir zustimmen , ist mir beim ersten Lesen nicht aufgefallen .- Thx


@Sonniger

Nachtrag :

Was sollte diese Zeile bewirken ?
Code:
shpref.getBoolean(enabled,false);
Das Ergebnis ist nicht zugewiesen
 
Hallo,
ich habe nach einiger Recherche eine Anleitung im Internet gefunden:
Code:
package s_cube.de.project;

import android.app.AlertDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class Pass extends AppCompatActivity implements View.OnClickListener {

    private Button btn1;
    private EditText text1;

    private SharedPreferences speicher;
    private SharedPreferences.Editor editor;

    final boolean enabled = false;

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

        btn1 = (Button) findViewById(R.id.button);
        btn1.setOnClickListener(this);

        text1 = (EditText) findViewById(R.id.editText);
        text1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

        speicher = getApplicationContext().getSharedPreferences("Daten", 0);
        editor = speicher.edit();

         speicher = getSharedPreferences("Daten", 0);
         speicher.getBoolean("Data1", enabled);

    }


    public void onClick (View view){


        if (text1.getText().toString().equals("pass")){
            AlertDialog ad = new AlertDialog.Builder(this).create();
            ad.setMessage("Super");
            ad.show();
            Intent intent = new Intent(this,Popup.class);
            startActivity(intent);

            btn1.setEnabled(enabled);

            editor.putBoolean("Data1", enabled);
            editor.commit();

        }else{
            String message = "Leider falsch";
            Toast.makeText(this,message, Toast.LENGTH_LONG).show();
        }
    }

}
Der Code funktioniert auch nicht was ist bei dem falsch?

Ich weis das oben bereits die Lösungen stehen, aber ich möchte noch mehr bzw. weitere Code´s ausprobieren um richtig dahinter zu steigen.

MfG

Sonniger
 
Hallo Sonniger ,

was wir versuchen dir zu sagen ist , dass du nicht im Internet recherchieren ,
sondern eigentlich deine Hausaufgaben machen sollst - Ergo Lernen & verstehen .

Du kannst keine Fremdsprache sprechen , wenn du Dir nicht mal das Vokabelheft schnappst

SharedPreferences | Android Developers

Mehr als 5 (!) mal kann man nicht hinschreiben , wo du Fehler machst.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lordzwieback
Okay, vielen Dank trotzdem.

MfG

Sonniger
 

Ähnliche Themen

B
Antworten
4
Aufrufe
406
bb321
B
A
Antworten
10
Aufrufe
1.852
swa00
swa00
FabianDev
Antworten
5
Aufrufe
515
swa00
swa00
Zurück
Oben Unten