Daten bzw Objekte auf das Handy lokal speichern

Panda9296

Bekanntes Mitglied
Hi ich versuche folgendes Objekt zu speichern und finde einfach keine Lösung wie das gehen soll. Ich möchte keine Datenbank sondern die Accountinfos sollen so einfach wie es geht aufs handy gespeichert werden. Ich möchte mit den Daten arbeiten also zu diesem User sollen dann noch andere Sachen hinzugefügt werden

Code:
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class Register extends AppCompatActivity {

    private static final String TAG = Register.class.getSimpleName();
    private static final String FILENAME= TAG+ "database.txt";


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

    public void Register(View view) {
        //decliation
        String input;
        String inputE;
        String inputP;
        String inputControlP;
        Counter counter = null;
        SharedPreferences mySPR;

        int inputID;
        User user =new User();
        String userData;



        //source
        EditText inputName= (EditText)findViewById(R.id.bntInputName);
        EditText inputEmail=(EditText)findViewById(R.id.bntInputEmail);
        EditText setPasswort=(EditText)findViewById(R.id.bntsetPasswort);
        EditText setControlPasswort=(EditText)findViewById(R.id.bntControlPasswort);


        //set to User
        input= (inputName.getText().toString());
        inputE= (inputEmail.getText().toString());
        inputP= (setPasswort.getText().toString());
        inputControlP=(setControlPasswort.getText().toString());


       user.setUserName(input);
       user.setEmail(inputE);
        if(input.equals(inputControlP)){
            user.setPasswort(inputP);
        }
        inputID=counter.getId();
        user.setUserID(inputID);
        userData= user.toString();

       


    }

  }
 

Das wäre jetzt die Vorlage. Das heisst so wie ich das verstehe müsste ich jetzt die UserID bei "edtor.putint("USERID",variable was auch immer hier rein kommt) setzen? Weil ich habe es schonmal versucht und irgendwie will er mir den User nicht speichern. Ich denke, da es mein erstes mal ist das ich das machen möchte, dass ich irgenwie ein Denkfehler habe. Ich muss aber schon das Objekt als String einspeichern?

Code:
 // Called when user click to Save button.
    public void doSave(View view)  {
        // The created file can only be accessed by the calling application
        // (or all applications sharing the same user ID).
        SharedPreferences sharedPreferences= this.getSharedPreferences("gameSetting", Context.MODE_PRIVATE);
 
        SharedPreferences.Editor editor = sharedPreferences.edit();
 
        editor.putInt("brightness", this.seekBarBrightness.getProgress());
        editor.putInt("sound", this.seekBarSound.getProgress());
 
        // Checked RadioButton ID.
        int checkedRadioButtonId = radioGroupDiffLevel.getCheckedRadioButtonId();
 
        editor.putInt("checkedRadioButtonId", checkedRadioButtonId);
 
        // Save.
        editor.apply();
 
        Toast.makeText(this,"Game Setting saved!",Toast.LENGTH_LONG).show();
    }
 
Ich weiß das hört sich echt doof an, aber ich verzweifle seit gestern um 10 Uhr morgens daran 😀 Der PC ist also schon fast fliegen gelernt ^^. Ich verstehe nicht so ganz was da genau passiert. Ich habe mir das durchgelesen. Es geht darum einen User beim regristrieren zu speichern. Gut ich habe bereits eine UserID gesetzt die habe ich jetzt so gespeichert:

Code:
editor.putString("inputiD",userData);
        editor.commit();
Dabei ist die userData der User mit toString... also die Attribute sind in einem String wie folgt verpackt:

Code:
public String toString() {
        return "#" + userID + "#" + userName + "#" + passwort + "#" + email
                + "#";
    }

so ich müsste das doch jetzt irgendwie sehen und vor allem, wenn ich das gespeichert habe und es damit funktioniert hätte, müsste ich doch den login einfach gestalten können.

Wenn es eingespeichert ist müsste es nach meinem Verständnis von :
Code:
editor.putString("inputiD",userData);
        editor.commit();

(also das habe ich jetzt nach dem Schema vom Guide eingetragen)unter der ID inputID gespeichert sein und unter der ID müsste der string eingespeichert sein... Wo finde ich das, wenn es so ist, da ich ja jetzt den login machen möchte, wo ich diese ID suchen muss. nur wo suche ich sie. Habe ich überhaupt mit dem Befehl :

Code:
SharedPreferences sharedPreferences= this.getSharedPreferences("User.txt",0);
die Datei User.txt erzeugt^^?
 
Naja, wenn Du auf die Daten wieder zugreifen willst, holst Du Dir die SharedPreferences
Java:
SharedPreferences sharedPreferences= this.getSharedPreferences("gameSetting", Context.MODE_PRIVATE);
und liest sie aus:
Java:
int brightness = sharedPreferences.getInt("brightness");
(Um mal bei Deinem Beispiel aus Kommentar #3 zu bleiben).
 
Naja, wenn Du auf die Daten wieder zugreifen willst, holst Du Dir die SharedPreferences
Java:
SharedPreferences sharedPreferences= this.getSharedPreferences("gameSetting", Context.MODE_PRIVATE);
und liest sie aus:
Java:
int brightness = sharedPreferences.getInt("brightness");
(Um mal bei Deinem Beispiel aus Kommentar #3 zu bleiben).
Kann man den sharedPreferences dann auch in einer anderen Activity öffnen? Für den Log in also
 
Natürlich. Die SharedPreferences sind das, was Du normalerweise in den Optionen der App einstellst. Verwendet werden die dann an unterschiedlichen Stellen in der App.
 
ok. Hast du vielleicht deutsche Quellen? Das ich vielleicht nochmal auf deutsch nachlesen kann, da es so nicht funktioniert ^^ . Ich muss da wohl nochmal genauer kucken
 
Nein, deutsche Quellen habe ich nicht. Du musst halt in Deiner Activity Dir die gleichen SharedPreferences holen.
Leider ist es einfach nicht möglich, da der Compoiler in jeder Variation einen Fehler schmeisst: Sicher das es so geht?
Ich kann die Daten jedenfalls nicht holen so wie du es beschreibst =(

Code:
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import static android.app.PendingIntent.getActivity;

public class MainActivity extends Activity implements View.OnClickListener {

    Button btnRegister;
    Button btnSignIn;
    int userID;
    SharedPreferences sharedPreferences;

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

        btnRegister= (Button)findViewById(R.id.bntRegister);
        btnRegister.setOnClickListener(this);
        btnSignIn= (Button)findViewById(R.id.bntSignIn);

        // sign in condition
        btnSignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                EditText inputName= (EditText)findViewById(R.id.bntViewEmail);
                EditText inputPasswort= (EditText)findViewById(R.id.btnViewPasswort);
                // Shared Preferencs

                sharedPreferences= getActivity().getSharedPreferences("userID",Context.MODE_PRIVATE);

                
            }
        });

    }
     //register button
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this,Register.class);
        startActivity(intent);

    }
er akzeptiert die getActivity nicht. Ich habe es mit einem intent probiert... er erkennt den initialisierten Intent nicht.


Die Regrstry müsste richtig sein und da hat auch laut code alles geklappt...

Code:
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.SharedPreferencesCompat;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Register extends AppCompatActivity implements View.OnClickListener {

    SharedPreferences sharedPreferences;

    Button regristryFinish;



    int inputID;
    User user =new User();
    String userData;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        regristryFinish=(Button)findViewById(R.id.btnRegistry);
        regristryFinish.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {


        //decliation
        String input;
        String inputE;
        String inputP;
        String inputControlP;
        Counter counter = null;



        //source
        EditText inputName= (EditText)findViewById(R.id.bntInputName);
        EditText inputEmail=(EditText)findViewById(R.id.bntInputEmail);
        EditText setPasswort=(EditText)findViewById(R.id.bntsetPasswort);
        EditText setControlPasswort=(EditText)findViewById(R.id.bntControlPasswort);
        TextView inputAnswer=(TextView) findViewById(R.id.btnAnswer);




        //set to User
        input= (inputName.getText().toString());
        inputE= (inputEmail.getText().toString());
        inputP= (setPasswort.getText().toString());
        inputControlP=(setControlPasswort.getText().toString());


       user.setUserName(input);
       user.setEmail(inputE);
        if(input.equals(inputControlP)){
            user.setPasswort(inputP);
        }
        else {
            inputAnswer.setText("Passwörter stimmen nicht überein");
        }


        inputID=counter.getId();
        user.setUserID(inputID);
        userData= user.toString();
        sharedPreferences= this.getSharedPreferences("User.txt",0);
        SharedPreferences.Editor editor=sharedPreferences.edit();

        inputAnswer.setText("Regristration erfolgreich!");
        editor.putString("inputiD",userData);
        editor.commit();

        Intent intent= new Intent(this,MainActivity.class);
        startActivity(intent);

    }


}
 
er akzeptiert die getActivity nicht.
Natürlich nicht. Du bist in einem Listener, da es sich aber um eine anonyme innere Klasse in der MainActivity handelt, kannst Du auf das MainActivity-Objekt per MainActivity.this zugreifen: MainActivity.this.getSharedPreferences(...) im Listener sollte also funktionieren.

Nachtrag: außerdem kannst Du sharedPreferences außerhalb des Listeners initialisieren.
 
okay interessant dieses android ^^ aber ich kann dann diesen Zugriff noch nicht als String bearbeiten? Dazu müsste ich dann sagen

String user = sharedPreferences.getString("userID");
und dann kann ich den wie in den Grundlagen von Java bearbeiten? bzw auslesen weil ich ja überprüfen möchte, ob die daten übereinstimmen.

Ich hab das alles halt nur in java und ohne speicherung von daten gemacht deswegen bin ich dabei voll lost 😀
 
okay interessant dieses android
Das hat jetzt wiederum nichts mit Android zu tun 🙂

Mit new View.OnClickListener() { erzeugst Du eine anonyme Klasse, die von View.OnClickListener abgeleitet ist.

Die Methode public void onClick(View view) { ist Teil dieser Klasse, dem entsprechend zeigt this dort nicht auf das MainActivity-Objekt sondern auf das Objekt der anonymen Klasse (d. h. den OnClickListener, den Du gerade mit new erzeugt hast).

Da die umschließende Klasse die MainActivity ist, kannst Du jedoch auf das Objekt der MainActivity via MainActivity.this zugreifen. Das ist alles Standard-Java.


Java:
class A {
    class B {
        // hier bezieht sich this auf ein B-Objekt
        // man kann aber per A.this auf das umschließende A-Objekt zugreifen
    }

    // hier bezieht sich this auf ein A-Objekt
}


Dazu müsste ich dann sagen

String user = sharedPreferences.getString("userID");

und dann kann ich den wie in den Grundlagen von Java bearbeiten? bzw auslesen weil ich ja überprüfen möchte, ob die daten übereinstimmen.
Klar, Du hast ein SharedPreferences-Objekt und das kannst Du ganz normal verwenden.

Der Unterschied zwischen Android und Java auf dem Desktop liegt nicht in der Sprache, sondern im Framework (und den Paketen, die zur Verfügung stehen). Die Sprache ist immer gleich und funktioniert immer gleich.

Das Framework ist einfach schon sehr verschieden vom Desktop. Die strikte Entkopplung von Activities über Intents und Broadcasts z. B. ist für Desktop-Programmierer erstmal sehr ungewöhnlich. Dann ist auf die Verwendung des richtigen Contexts zu achten. Auch, dass das Framework aktiv ins Geschehen eingreift, ist strange. Insofern ist es wichtig, sich an die Vorgaben von Android zu halten, sonst entsteht Murks, der zwar halbwegs funktioniert, aber in bestimmten Situationen einfach crasht.
 
Also das, was du jetzt von Java beschreibst ist mir bekannt. Zumindest von Java^^. Ich habe jetzt mal versucht alles zu befolgen
Ich bin auch tatsächlich weiter gekommen bis ich versucht habe den String zu zerlegen. Also was vielleicht auf dein Muster nicht zutrifft ist, dass die Registrierung ja in einer anderen aktivity stattfindet. Das ding dabei ist jetzt natürlich. Warum crasht es jetzt, weil ich mir sicher bin, dass ich den String richtig zerlegt habe. Ich denke es hat aufjedenfall was mit android zu tun. Also sobald ich daten eingebe crasht es -.-.

Code:
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.Arrays;

import static android.app.PendingIntent.getActivity;

public class MainActivity extends Activity implements View.OnClickListener {

    Button btnRegister;
    Button btnSignIn;
    int userID;
    SharedPreferences sharedPreferences;
    String user;

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

        btnRegister= (Button)findViewById(R.id.bntRegister);
        btnRegister.setOnClickListener(this);
        btnSignIn= (Button)findViewById(R.id.bntSignIn);

        // sign in condition
        btnSignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                EditText inputEmail= (EditText)findViewById(R.id.bntViewEmail);
                EditText inputPasswort= (EditText)findViewById(R.id.btnViewPasswort);
                // Shared Preferencs

                sharedPreferences= MainActivity.this.getSharedPreferences
                                               ("userID",Context.MODE_PRIVATE);
                String email = inputEmail.getText().toString();
                String passwort= inputPasswort.getText().toString();
                user = sharedPreferences.toString();
                if(email.isEmpty()){
                    inputEmail.setError("bitte Email eingeben");
                    inputEmail.requestFocus();
                }
                else if(passwort.isEmpty()){
                    inputPasswort.setError("Bitte geben Sie ein Passwort ein");
                    inputPasswort.requestFocus();
                }
                else if(!email.isEmpty()&&!passwort.isEmpty()){
                    for(int i=0;i<user.length();i++){
                       String userAddributs[]=  user.split("#");
                        Arrays.toString(userAddributs);
                        if(email.equals(userAddributs[2])&&passwort.equals(userAddributs[3])){
                            Intent intent= new Intent(MainActivity.this,
                                                                     FreezerManagment.class);
                            startActivity(intent);
                        }else if(!email.equals(userAddributs[2])){
                            inputEmail.setError("Emailadresse stimmt nicht überein.");
                        }else if(!passwort.equals(userAddributs[3])){
                            inputPasswort.setError("Passwort stimmt nicht überein.");
                        }
                    }
                }
            }
        });

    }
     //register button
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this,Register.class);
        startActivity(intent);

    }
}
 
Ei, ei, ei, jetzt sehe ich das erst. Da stimmt ja gar nichts zusammen:

1. Du musst schon die gleichen Preferences laden, die Du zuvor gespeichert hast.

sharedPreferences= this.getSharedPreferences("User.txt",0);
vs.
sharedPreferences= MainActivity.this.getSharedPreferences("userID",Context.MODE_PRIVATE);

User.txt ist nicht "userID".

2. user = sharedPreferences.toString(); -- was soll das werden?

3. hast Du editor.putString("inputiD",userData); verwendet, dann musst Du auch den Key "inputiD" verwenden, um an die Daten heranzukommen.

String userData = sharedPreferences.getString("inputiD");
 
Okay. also das erste habe ich gemacht weil... naja ich habe einfach falsch gedacht. Ich denke es muss immer eine Datei erzeugt werden. Ich dachte ich muss mit
Code:
sharedPreferences= this.getSharedPreferences("user.txt",0);
eine Datei erzeugen.
Es wird aber in xml eingespeichert also ... ja.
So wie ich das verstehe muss die zeile also natürlich in "inputID"gewechselt werden... soweit so gut.
1b.Im Code habe ich vergessen das Array in dem ich den Userstring eingespeichert habe auch abzufragen.. hab ich gefunden.
2.ja ein dummer gedanke den string nochmal extra einzuspeichern
3. in der MainActivity habe ich es überarbeitet:
Code:
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.Arrays;

import static android.app.PendingIntent.getActivity;

public class MainActivity extends Activity implements View.OnClickListener {

    Button btnRegister;
    Button btnSignIn;
    SharedPreferences sharedPreferences;
    String user;

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

        btnRegister= (Button)findViewById(R.id.bntRegister);
        btnRegister.setOnClickListener(this);
        btnSignIn= (Button)findViewById(R.id.bntSignIn);

        // sign in condition
        btnSignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                EditText inputEmail= (EditText)findViewById(R.id.bntViewEmail);
                EditText inputPasswort= (EditText)findViewById(R.id.btnViewPasswort);
                // Shared Preferencs

                sharedPreferences= MainActivity.this.getSharedPreferences
                                               ("userID",Context.MODE_PRIVATE);
                String email = inputEmail.getText().toString();
                String passwort= inputPasswort.getText().toString();

                if(email.isEmpty()){
                    inputEmail.setError("Bitte Email eingeben");
                    inputEmail.requestFocus();
                }
                else if(passwort.isEmpty()){
                    inputPasswort.setError("Bitte geben Sie ein Passwort ein");
                    inputPasswort.requestFocus();
                }
                else if(!email.isEmpty()&&!passwort.isEmpty()){
                    for(int i=0;i<user.length();i++){
                       String userAddributs[]=  user.split("#");
                       for(int j=0;j<userAddributs.length;j++){
                           Arrays.toString(userAddributs);
                           if(email.equals(userAddributs[2])&&passwort.equals(userAddributs[3])){
                               Intent intent= new Intent(MainActivity.this,
                                       FreezerManagment.class);
                               startActivity(intent);
                           }else if(!email.equals(userAddributs[2])){
                               inputEmail.setError("Emailadresse stimmt nicht überein.");
                           }else if(!passwort.equals(userAddributs[3])){
                               inputPasswort.setError("Passwort stimmt nicht überein.");
                           }
                           else{
                               inputEmail.setError("Emailadresse stimmt nicht überein.");
                               inputPasswort.setError("Passwort stimmt nicht überein.");
                           }
                       }

                    }
                }
            }
        });

    }
     //register button
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this,Register.class);
        startActivity(intent);

    }
}
Code:
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.SharedPreferencesCompat;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Register extends AppCompatActivity implements View.OnClickListener {

    SharedPreferences sharedPreferences;

    Button regristryFinish;



    int inputID;
    User user =new User();
    String userData;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        regristryFinish=(Button)findViewById(R.id.btnRegistry);
        regristryFinish.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {


        //decliation
        String input;
        String inputE;
        String inputP;
        String inputControlP;
        Counter counter = null;



        //source
        EditText inputName= (EditText)findViewById(R.id.bntInputName);
        EditText inputEmail=(EditText)findViewById(R.id.bntInputEmail);
        EditText setPasswort=(EditText)findViewById(R.id.bntsetPasswort);
        EditText setControlPasswort=(EditText)findViewById(R.id.bntControlPasswort);
        TextView inputAnswer=(TextView) findViewById(R.id.btnAnswer);




        //set to User
        input= (inputName.getText().toString());
        inputE= (inputEmail.getText().toString());
        inputP= (setPasswort.getText().toString());
        inputControlP=(setControlPasswort.getText().toString());


       user.setUserName(input);
       user.setEmail(inputE);
        if(input.equals(inputControlP)){
            user.setPasswort(inputP);
        }
        else {
            inputAnswer.setText("Passwörter stimmen nicht überein");
        }


        inputID=counter.getId();
        user.setUserID(inputID);
        userData= user.toString();
        sharedPreferences= this.getSharedPreferences("User.txt",0);
        SharedPreferences.Editor editor=sharedPreferences.edit();

        inputAnswer.setText("Regristration erfolgreich!");
        editor.putString("inputID",userData);
        editor.commit();

        Intent intent= new Intent(this,MainActivity.class);
        startActivity(intent);

    }
}

Das ist jetzt die Fehlermeldung:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.miguel.frozzenlist.frozzenbetaa, PID: 18749
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
at de.miguel.frozzenlist.frozzenbetaa.MainActivity$1.onClick(MainActivity.java:59)
at android.view.View.performClick(View.java:7438)
at android.view.View.performClickInternal(View.java:7415)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28286)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
 
So wie ich das verstehe muss die zeile also natürlich in "inputID"gewechselt werden... soweit so gut.
Nein. Die Preferences sind eine Sammlung von Key-Value-Paaren und die werden in einer Datei gespeichert. Natürlich musst Du dann die gleiche Datei verwenden. Ebenso musst Du den gleichen Key zum Schreiben und Lesen verwenden.

Du verwendest nach wie vor unterschiedliche Dateien
sharedPreferences= MainActivity.this.getSharedPreferences ("userID",Context.MODE_PRIVATE);
sharedPreferences= this.getSharedPreferences("User.txt",0);
und user wird überhaupt nicht ausgelesen.
 
Lach mich nicht aus 😀
ich blicke nicht durch ich gehe seit über eine Stunde den kompletten Verlauf durch ich versuche deine Anweisungen umzusetzen, aber irgendwie....
darf ich dich vielleicht in Discord zu einer Konferenz einladen 😀. Ich muss das verstehen wirklich ich sitze seit 3 Tagen daran. Bitte bitte 😀
 
Ich habe kein Discord. Stell Dir die SharedPreferences einfach als Datei vor. Bei getSharedPreferences gibst Du den Namen der zu verwendenden Datei an. Wenn Du also in der Register-Activity in eine Datei "user.txt" etwas hineinschreibst, dann musst Du in der MainActivity natürlich aus der Datei "user.txt" wieder lesen (und nicht aus Datei Y). D. h. in beiden Fällen wird getSharedPreferences "user.txt" als Parameter erhalten müssen.

Mit
Java:
editor.putString("inputID",userData);
schreibst Du in die Datei, dass unter dem Key "inputID" der Wert von userData abgelegt werden soll.

Dem entsprechend musst Du userData in der MainActivity wieder mit
Java:
String userData = sharedPreferences.getString("inputID");
aus der Datei laden.

Was sollen eigentlich die beiden Schleifen in Deinem Listener?
 
ok ich probiere das jetzt nochmal.
Ich gehe das jetzt Zeichen für Zeichen durch ich will das hinbekommen 😀 .
Die sind warscheinlich dafür verantwortlich, dass das programm bei click abstürtzt... Ich habe ja den String zerlegt. Hab ihn in ein Array gespeichert und den String des array wollte ich index für index auslesen und ihn splitten und dannach wollte ich von userAddributs den index 2 und 3 prüfen, da ich weiß dass das die email und das passwort ist und die wollte ich auch überprüfen.

ich dachte das ist dann wie eine Hashmap du hast dann den key also den userID und fragst die User ab und du prüfst pro user also pro Account das passwort und die email bzw soll er ja den key berücksichtigen... Ich dachte ich vergleiche dann die Eingabe mit eingespeicherten Passwort und wenn das true ist hat er zugang zu seinem Account der Freezer Manager ist so eine konfigurationsstelle da soll dann entweder die bestehende Gefriertruhe ausgewählt werden oder eine neue mit neuem Setup erstellt werden können. Ich brauch die Daten auch, um natürlich einer gefriertruhe mehrere User zuzuordnen und ich kenne zwar sqllite aber ich möchte die app unabhängig von einer datenbank entwickeln. Ich mache eine Umschulung zum Fachinformatiker für Anwendungsentwicklung. Ich hab ende nächsten Jahres Prüfung und wir arbeiten gerade die Grundlagen von Java durch. Ich habe mir aber vorher das Wissen vom Buch "Hallo Schrödinger" beigebracht. Nur da sind es halt nur Übungen. Wenn man dann so ein ganzes Projekt hat, ist es für mich zumindest, was vollkommen anderes.
 
ich habe auch ein Lastenheft erstellt ^^ Fürs Pflichtenheft war ich zu faul und habe skizzierte Klassendiagramme gemacht. Vielleicht war das ein Fehler, aber ich dachte mir, wenn ich eh schauen muss wie es in Android geht, bringt der Plan auch nix. So wollte ich Stück für Stück einbinden.
Code:
package de.miguel.frozzenlist.frozzenbetaa;

public class Product {


    private String name;
    private int ProductID;
    private String typ;
    private int frozzenDate;


    public void setName(String name) {
        this.name = name;
    }

    public int getProductID() {
        return ProductID;
    }

    public void setProductID(int productID) {
        ProductID = productID;
    }

    public String getTyp() {
        return typ;
    }

    public void setTyp(String typ) {
        this.typ = typ;
    }


    @Override
    public String toString() {
        return "Product [name=" + name + ", ProductID=" + ProductID + ", typ=" + typ + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ProductID;
        result = prime * result + frozzenDate;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + ((typ == null) ? 0 : typ.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Product other = (Product) obj;
        if (ProductID != other.ProductID)
            return false;
        if (frozzenDate != other.frozzenDate)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (typ != other.typ)
            return false;
        return true;
    }
}
Code:
package de.miguel.frozzenlist.frozzenbetaa;

import java.util.ArrayList;

public class Tray {

    private int trayID;
    private ArrayList<Product> productList= new ArrayList<Product>();

    public Tray(int trayID, int userID,ArrayList<Product>productList) {
        this.trayID = trayID;
        this.productList=productList;
    }
    public void showTray() {
        toStringForListInformation();
    }
    public void addProduct(ArrayList<Product>productList, Product product){

        productList.add(product);
    }
    public void removeProduct(int input,ArrayList<Product>productlist) {
        toStringForListInformation();
        toStringQuestionWhichIndexRemove();
        productlist.remove(input);
    }
    public int getTrayID() {
        return trayID;
    }
    public void setTrayID(int trayID) {
        this.trayID = trayID;
    }
    public ArrayList<Product> getProductList() {
        return productList;
    }
    public void addProduct(String name,String typ,int productID) {
        Product product =new Product();
        product.setName(name);
        product.setTyp(typ);
        product.setProductID(productID);
        productList.add(product);
    }
    public void removeProduct(int input) {
        for(int i=0;i<productList.size();i++) {
            while(input==i) {
                productList.remove(i);
            }toStringMessageOutOfBons();
        }
    }
    public void changeProduct(int input,String name,String typ,int productID) {
        for(int i=0;i<productList.size();i++) {
            while(input==i) {
                productList.get(i);
                Product product =new Product();
                product.setName(name);
                product.setTyp(typ);
                product.setProductID(productID);
                productList.add(i, product);


            }toStringMessageOutOfBons();
        }
    }

    @Override
    public String toString() {
        return "Tray [trayID=" + trayID + ", productList=" + productList + "]";
    }
    @SuppressWarnings("unused")
    public String toStringForListInformation() {

        for(int i=0;i<productList.size();i++) {

            return "Listung des Faches: "+trayID+"\n "+productList.get(i);
        }
        return "Keine Liste vorhanden";
    }
    public static String toStringQuestionWhichIndexRemove() {
        return "Welchen Index wollen Sie löschen?";
    }
    public static String toStringMessageOutOfBons() {
        return "Falsche Eingabe. Deine Eingabe ist außerhalb der Indexreichweite!\nVersuche es nochmal";
    }
}

Code:
package de.miguel.frozzenlist.frozzenbetaa;

import java.util.ArrayList;

public class Freezer {

    ArrayList<Tray>tray= new ArrayList<Tray>();
}
 
Ich habe kein Discord. Stell Dir die SharedPreferences einfach als Datei vor. Bei getSharedPreferences gibst Du den Namen der zu verwendenden Datei an. Wenn Du also in der Register-Activity in eine Datei "user.txt" etwas hineinschreibst, dann musst Du in der MainActivity natürlich aus der Datei "user.txt" wieder lesen (und nicht aus Datei Y). D. h. in beiden Fällen wird getSharedPreferences "user.txt" als Parameter erhalten müssen.

Mit
Java:
editor.putString("inputID",userData);
schreibst Du in die Datei, dass unter dem Key "inputID" der Wert von userData abgelegt werden soll.

Dem entsprechend musst Du userData in der MainActivity wieder mit
Java:
String userData = sharedPreferences.getString("inputID");
aus der Datei laden.

Was sollen eigentlich die beiden Schleifen in Deinem Listener?
So ich bin alles durchgegangen und eigentlich sollte es funktionieren. Das Speichern geht zumindest. Nur wenn ich da jetzt überprüfen möchte, ob das selbe drinnen steht im Array,dann kommt ein false. Theoretisch müsste das Laden aber funktionieren. ÄHM und das Array hab ich auch überarbeitet 😀 und ich habe die Klasse User auch nochmal was hinzugefügt aber erst die Wesentlichen Sachen zu dem Thread:

Code:
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.Arrays;

import static android.app.PendingIntent.getActivity;

public class MainActivity extends Activity implements View.OnClickListener {

    Button btnRegister;
    Button btnSignIn;
    SharedPreferences sharedPreferences;
    String userData;

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

        btnRegister= (Button)findViewById(R.id.bntRegister);
        btnRegister.setOnClickListener(this);
        btnSignIn= (Button)findViewById(R.id.bntSignIn);

        // sign in condition
        btnSignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                EditText inputEmail= (EditText)findViewById(R.id.bntViewEmail);
                EditText inputPasswort= (EditText)findViewById(R.id.btnViewPasswort);
                // Shared Preferencs

                sharedPreferences= MainActivity.this.getSharedPreferences
                                               ("userID",0);
                SharedPreferences.Editor editor= sharedPreferences.edit();
                userData=sharedPreferences.getString("inputID",userData);



                String email = inputEmail.getText().toString();
                String passwort= inputPasswort.getText().toString();

                if(email.isEmpty()){
                    inputEmail.setError("Bitte Email eingeben");
                    inputEmail.requestFocus();
                }
                else if(passwort.isEmpty()){
                    inputPasswort.setError("Bitte geben Sie ein Passwort ein");
                    inputPasswort.requestFocus();
                }
                else if(!email.isEmpty()&&!passwort.isEmpty()) {
                    String userAccount[]=userData.split("#");

                    if (userAccount[2].contains(email)&&userAccount[3].contains(passwort)){
                       Intent intent = new Intent(MainActivity.this,
                               FreezerManagment.class);
                       startActivity(intent);
                   }
                    else{
                        System.out.println("fail");
                    }

                }
            }
        });

    }
     //register button
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this,Register.class);
        startActivity(intent);

    }
}
Code:
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.SharedPreferencesCompat;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Register extends AppCompatActivity implements View.OnClickListener {

    SharedPreferences sharedPreferences;

    Button regristryFinish;



    int inputID;
    User user =new User();
    String userData;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        regristryFinish=(Button)findViewById(R.id.btnRegistry);
        regristryFinish.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {


        //decliation
        String input;
        String inputE;
        String inputP;
        String inputControlP;
        Counter counter= new Counter();



        //source
        EditText inputName= (EditText)findViewById(R.id.bntInputName);
        EditText inputEmail=(EditText)findViewById(R.id.bntInputEmail);
        EditText setPasswort=(EditText)findViewById(R.id.bntsetPasswort);
        EditText setControlPasswort=(EditText)findViewById(R.id.bntControlPasswort);
        TextView inputAnswer=(TextView) findViewById(R.id.btnAnswer);




        //set to User
        input= (inputName.getText().toString());
        inputE= (inputEmail.getText().toString());
        inputP= (setPasswort.getText().toString());
        inputControlP=(setControlPasswort.getText().toString());


       this.user.setUserName(input);
       this.user.setEmail(inputE);
        if(input.equals(inputControlP)){
            user.setPasswort(inputP);
        }
        else {
            inputAnswer.setText("Passwörter stimmen nicht überein");
        }


        inputID=counter.getId();
        this.user.setUserID(inputID);
        userData= this.user.toString();
        sharedPreferences= this.getSharedPreferences("userID",0);
        SharedPreferences.Editor editor=sharedPreferences.edit();
            editor.putString("inputID",userData);
            editor.commit();
            if (editor.commit()){
            inputAnswer.setText("Regristration erfolgreich!");

            Intent intent= new Intent(this,MainActivity.class);
            startActivity(intent);
        }
            else{
                inputAnswer.setText("Regristration nicht erfolgreich!");
            }



    }
}
Also es wurde aufjedenfall gespeichert und ich rufe es diesmal genauso auf wie du es geschrieben hast...hoffe ich sonst klappe ich den pc zu und schmeiß ihn ins Wasser 😀
 
So sieht der Code in der MainActivity auf jeden Fall schon mal wesentlich besser aus (den Editor brauchst Du dort aber nicht).

Schauen wir uns das mal an:

Java:
                    String userAccount[]=userData.split("#");

                    if (userAccount[2].contains(email)&&userAccount[3].contains(passwort)){
                       Intent intent = new Intent(MainActivity.this,
                               FreezerManagment.class);
                       startActivity(intent);
                   }
                    else{
                        System.out.println("fail");
                    }

User#toString, hast Du geschrieben, sieht so aus:
Java:
public String toString() {
        return "#" + userID + "#" + userName + "#" + passwort + "#" + email
                + "#";
    }

In dem Fall wäre der Benutzername bei Index 2 und E-Mail bei Index 4. Du vergleichst aber oben email mit Index 2, also dem Benutzernamen. Entweder musst Du oben den Index auf 4 ändern, oder mit email wird in der MainActivity der Benutzername abgefragt. Das wäre, was mir gerade auffallen würde.
 
So sieht der Code in der MainActivity auf jeden Fall schon mal wesentlich besser aus (den Editor brauchst Du dort aber nicht).

Schauen wir uns das mal an:

Java:
                    String userAccount[]=userData.split("#");

                    if (userAccount[2].contains(email)&&userAccount[3].contains(passwort)){
                       Intent intent = new Intent(MainActivity.this,
                               FreezerManagment.class);
                       startActivity(intent);
                   }
                    else{
                        System.out.println("fail");
                    }

User#toString, hast Du geschrieben, sieht so aus:
Java:
public String toString() {
        return "#" + userID + "#" + userName + "#" + passwort + "#" + email
                + "#";
    }

In dem Fall wäre der Benutzername bei Index 2 und E-Mail bei Index 4. Du vergleichst aber oben email mit Index 2, also dem Benutzernamen. Entweder musst Du oben den Index auf 4 ändern, oder mit email wird in der MainActivity der Benutzername abgefragt. Das wäre, was mir gerade auffallen würde.
nein hatte ich leider schon überprüft ich habe den Code so geändert:
Code:
public String toString() {
        return "#" + userID + "#" + userName + "#" + email + "#" + passwort
                + "#";
}
somit ist der Code ja bei 2 und 3 weil es ja bei 0 anfängt zu zählen
 
So sieht der Code in der MainActivity auf jeden Fall schon mal wesentlich besser aus (den Editor brauchst Du dort aber nicht).

Schauen wir uns das mal an:

Java:
                    String userAccount[]=userData.split("#");

                    if (userAccount[2].contains(email)&&userAccount[3].contains(passwort)){
                       Intent intent = new Intent(MainActivity.this,
                               FreezerManagment.class);
                       startActivity(intent);
                   }
                    else{
                        System.out.println("fail");
                    }

User#toString, hast Du geschrieben, sieht so aus:
Java:
public String toString() {
        return "#" + userID + "#" + userName + "#" + passwort + "#" + email
                + "#";
    }

In dem Fall wäre der Benutzername bei Index 2 und E-Mail bei Index 4. Du vergleichst aber oben email mit Index 2, also dem Benutzernamen. Entweder musst Du oben den Index auf 4 ändern, oder mit email wird in der MainActivity der Benutzername abgefragt. Das wäre, was mir gerade auffallen würde.
So sieht der Code in der MainActivity auf jeden Fall schon mal wesentlich besser aus (den Editor brauchst Du dort aber nicht).

Schauen wir uns das mal an:

Java:
                    String userAccount[]=userData.split("#");

                    if (userAccount[2].contains(email)&&userAccount[3].contains(passwort)){
                       Intent intent = new Intent(MainActivity.this,
                               FreezerManagment.class);
                       startActivity(intent);
                   }
                    else{
                        System.out.println("fail");
                    }

User#toString, hast Du geschrieben, sieht so aus:
Java:
public String toString() {
        return "#" + userID + "#" + userName + "#" + passwort + "#" + email
                + "#";
    }

In dem Fall wäre der Benutzername bei Index 2 und E-Mail bei Index 4. Du vergleichst aber oben email mit Index 2, also dem Benutzernamen. Entweder musst Du oben den Index auf 4 ändern, oder mit email wird in der MainActivity der Benutzername abgefragt. Das wäre, was mir gerade auffallen würde.
neuer Tag neues Glück ich denke ich habe den Fehler gefunden. Es liegt an sharedPreferences ich habs einigermaßen endlich verstanden. sharedPreferences.getString soll meinen Key holen und der key hat mein user data ich hatte das vorher allerdings so gelöst:
Code:
userData=sharedPreferences.getString("inputID",userData );
macht natürlich keinen Sinn... da kann nix gespeichert sein ich habe das gelöscht. Du hattest ja gemeint, dass der Code so geholt wird

Code:
userData=sharedPreferences.getString("inputID");
und warum auch immer zeigt er einen fehler mit dem Key an also "inputID" ich hatte es aber überprüft und der key ist dieser inputID key^^ er erwartet also einen zweiten parameter weil die fehlermeldung dann weg ist. Was erwartet er den? Einen String? Welchen?
 
Danke für deine Antwort und deine Einbringung in das Themenfeld. Allerdings wurde es schonmal gepostet im Verlauf und so wie ich das sehe, habe ich die Anweisungen komplett befolgt. Ich weiß nicht worauf du aus bist^^. Wenn du so nett wärst, mir nochmal erklärst was genau das Problem ist, wäre ich sehr dankbar, da ich mir das jetzt seit heute um 11 anschaue und nicht genau weiß, warum du den Link gepostet hast^^. Wahrscheinlich wegen dem Laden? Weil das speichern funktioniert laut meiner kleinen Prüfung 😀. Ich bin mir auch sicher, dass ich jede andere Weise egal wie du sie dir ausmalst durchprobiert habe, da ich seit dem Wochenende schon daran sitze.
 
Da steht zum Beispiel für was der zweite Parameter ist.
und es steht auch, wenn du nur ein Preferences brauchst, kannst du es so aufrufen
Alternatively, if you need just one shared preference file for your activity, you can use the getPreferences() method:

Dann steht in der Doku auch, dass das zweite Attribut von getString null sein darf. (aber nicht weggelassen)

Dann steht da auch, dass es ein "getAll" gibt, womit du dir mal alles anzeigen lassen könntest, um zu schauen ob da überhaupt was geschrieben wird.
 

Neue Themen


Zurück
Oben