2016-04-10 4 views
0

Ich versuche, eine Anmeldung/Registrierung Aktivität mit Sharedreference zu machen. Die App enthält nur eine Login/Passwort-Information.Android Anmeldung/Registrierung mit sharedPreference

Beim ersten Start überprüft die App, ob der Benutzer bereits ein Konto erstellt hat. Dies wird unter einem booleschen Namen namens Registriert. Wenn das wahr ist, wird es die Login-Schaltfläche aktivieren und die Schaltfläche "Registrieren" deaktivieren. Wenn es falsch ist, wird es die Register-Schaltfläche aktivieren und die Login-Schaltfläche deaktivieren.

Wenn der gewünschte Benutzername und das Passwort eingegeben werden, können sie den Registrierungsbutton drücken, der den Benutzernamen und das Passwort in Strings eingibt, während der Boolesche Wert in true geändert wird. Dann wird die Aktivität sich selbst aktualisieren.

Zur Zeit kann ich die Tasten nicht ändern. Ich denke, dass ich geteilte Präferenzen falsch mache, da dies das erste Mal ist, dass ich mit ihnen arbeite. (Ich bin neu in Android-Entwicklung.)

Hier ist mein aktueller Code.

Ich habe den Code aktualisiert, um editor.apply()

Ich habe ein paar Stücke hinzugefügt, vor allem den Wert beim Start zu bekommen.

Letzte UPDATE: Ich habe das Problem behoben. Es schien innerhalb der .setenabled zu liegen, die ich für die Knöpfe benutzte. Sobald ich sie auf .Sichtbarkeit umgestellt habe, haben sie perfekt umgeschaltet. Danke Ihnen allen für Ihre Hilfe!

public class MainActivity extends AppCompatActivity { 


EditText Username_input, Password_input; 
String Username, Password; 

//if false then no, if true then yes 
boolean Registered; 

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

    final SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    Registered = sharedPref.getBoolean("Registered", false); 

    Button RegisterButton = (Button) findViewById(R.id.Register_btn); 
    Button Loginbutton = (Button) findViewById(R.id.Login_btn); 

    // If the user is registered. 
    if (Registered == false) { 

     Loginbutton.setEnabled(false); 
     RegisterButton.setEnabled(true); 

     // If the user is registered already. 
    } else { 

     Loginbutton.setEnabled(true); 
     RegisterButton.setEnabled(false); 
    } 

    RegisterButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Username_input = (EditText) findViewById(R.id.Username_input); 
      Password_input = (EditText) findViewById(R.id.Password_input); 
      Username = Username_input.getText().toString(); 
      Password = Password_input.getText().toString(); 


      SharedPreferences.Editor editor = sharedPref.edit(); 
      editor.putBoolean("Registered", true); 
      editor.putString("Username", Username); 
      editor.putString("Password", Password); 
      editor.apply(); 

      finish(); 
      startActivity(getIntent()); 

     } 
    }); 
} 
} 

XML-Code

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="@string/Username_txtview" 
    android:id="@+id/Username_txtview" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginLeft="32dp" 
    android:layout_marginStart="32dp" 
    android:layout_marginTop="32dp" 
    android:editable="false" /> 

<EditText 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/Username_input" 
    android:enabled="true" 
    android:layout_marginLeft="32dp" 
    android:layout_marginRight="32dp" 
    android:layout_below="@+id/Username_txtview" 
    android:layout_centerHorizontal="true" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="@string/Password_txtview" 
    android:id="@+id/Password_txtview" 
    android:layout_below="@+id/Username_input" 
    android:layout_alignLeft="@+id/Username_input" 
    android:layout_alignStart="@+id/Username_input" /> 

<EditText 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/Password_input" 
    android:enabled="true" 
    android:layout_marginLeft="32dp" 
    android:layout_marginRight="32dp" 
    android:layout_below="@+id/Password_txtview" 
    android:layout_centerHorizontal="true" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="80dp" 
    android:layout_marginRight="80dp" 
    android:text="@string/Login_btn" 
    android:id="@+id/Login_btn" 
    android:layout_centerVertical="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Register_btn" 
    android:id="@+id/Register_btn" 
    android:layout_below="@+id/Login_btn" 
    android:layout_marginLeft="80dp" 
    android:layout_marginRight="80dp" 
    android:layout_marginTop="26dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    /> 

</RelativeLayout> 
+0

Wo sind Sie Wert aus dem gemeinsamen Vorlieben sich eintragen, bevor geprüft wird, ob es wahr/falsch ist? – Yashasvi

+0

wird dies funktionieren, um den Wert zu erhalten? Registriert = sharedPref.getBoolean ("Registriert", wahr); – arthos455

+0

posten Sie auch Ihre XML. – Yashasvi

Antwort

0
final SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
Registered = sharedPref.getBoolean("Registered", false); 

if (!Registered) { 

    Loginbutton.setVisibility(View.GONE); 
    RegisterButton.setVisibility(View.VISIBLE); 

    // If the user is registered already. 
} else{ 

    Loginbutton.setVisibility(View.VISIBLE); 
    RegisterButton.setVisibility(View.GONE); 
} 

RegisterButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Username_input = (EditText) findViewById(R.id.Username_input); 
     Password_input = (EditText) findViewById(R.id.Password_input); 
     Username = Username_input.getText().toString(); 
     Password = Password_input.getText().toString(); 

     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putBoolean("Registered", true); 
     editor.putString("Username", Username); 
     editor.putString("Password", Password); 
     editor.apply(); 

     finish(); 
     startActivity(getIntent()); 

    } 
}); 
0

versuchen, diese (keine Notwendigkeit gemeinsame pref als Endspiel)

SharedPreferences sharedPref = getContext().getSharedPreferences("hello", getContext().MODE_PRIVATE); 

Boolean register = sharedPref.getBoolean("key",true); 

und innen register.onClick

SharedPreferences sharedPref = getContext().getSharedPreferences("hello", getContext().MODE_PRIVATE); 
SharedPreferences.Editor editor= sharedPref.edit(); 
//your rest of the code to put string values into shared pref here. 
editor.putBoolean("key",false); 
editor.apply(); 
+0

Wenn ich sharedpref final nicht mache, bekomme ich eine Warnung, dass es als final deklariert werden muss. Ich habe versucht, Ihren Code zu implementieren und keine Änderung. – arthos455

+0

Lassen Sie mich Ihren Code überprüfen – Bawa

0

Fügen Sie editor.commit() hinzu, nachdem Sie den Wert in die Einstellungen eingegeben haben.

SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putBoolean("Registered", Registered); 
editor.putString("Username", Username); 
editor.putString("Password", Password); 
editor.commit(); 
+0

Ich habe in editor.commit() und .apply() Keine Änderungen hinzugefügt. – arthos455

0

Sie machen zwei Fehler:

  • nicht den registrierten Wert von gemeinsamen Präferenzen zu holen, bevor es zunächst den Wert zu überprüfen.
  • nicht nach der Eingabe neuer Werte editor.apply() oder editor.commit().
+0

Ive hinzugefügt die editor.apply(); Wird das nun funktionieren, um den Wert zu erhalten? Registriert = sharedPref.getBoolean ("Registriert", wahr); – arthos455

+0

Ja, es sollte funktionieren.aber bei gutem Design sollte der Standardwert (zweiter Parameter) falsch statt wahr sein. – Yashasvi

+0

Noch keine Änderung. Ich poste meinen aktuellen Code. – arthos455