TextEdit Filter für Passworteingabe verwenden

  • Antworten:4
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 1

15.03.2016, 13:23:21 via Website

Hi Experten,

ich befasse mich gerade etwas mit Android-App-Entwicklung. Ich möchte gerne, das der Nutzer beim ersten start der App einen Benutzernamen und ein Kennwort eingeben soll. Das Kennwort soll keine Sonderzeichen enthalten (ist so gewünscht). Dazu habe ich einen InputFilter erstellt. Wenn der Benutzer seinen Benutzernamen und das Kennwort zweimal eingegeben hat, dann klickt er auf speichern.

Ich habe aber jetzt das Problem, das ich den Filter erst im onClick anwende. Ich bekomme es im Moment leider nicht hin, dass der Filter schon während des Tippens verwendet wird. Hier mal mein Code.

package com.example.tobias.todoapp;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.Spanned;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class firtsStartActivity extends AppCompatActivity {

SharedPreferences pref;
SharedPreferences.Editor editor;

//Allow only letters or digits
InputFilter filter = new InputFilter() {
    public CharSequence filter(CharSequence source, int start, int end,
                               Spanned dest, int dstart, int dend) {
        for (int i = start; i < end; i++) {
            if (!Character.isLetter(source.charAt(i))) {
                return "";
            }
        }
        return null;
    }
};

//EditText passwort1 = (EditText) findViewById(R.id.passwort);


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

    //EditText name = (EditText) findViewById(R.id.name);
    EditText passwort1 = (EditText) findViewById(R.id.passwort);
    //EditText passwort2 = (EditText) findViewById(R.id.passwort2);
    passwort1.setFilters(new InputFilter[] {filter});

    //shared data vorbereiten
    pref = getSharedPreferences("ToDoApp", 0);
    editor = pref.edit();

    // uebrpruefen, ob ein Passwort gesetzt wurde
    if (pref.getString("Passwort", "").equals("")) {
        //Falls das Passwort noch nicht gesetzt wurde
        passwortEingabe();

    } else {
        passwortAbfrage();
    }


}

public void passwortEingabe(){

setContentView(R.layout.activity_firts_start);
    Button speichernButton = (Button) findViewById(R.id.speichern);
    speichernButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            //Nutzerdaten speichern beim klicken des Button
            EditText name = (EditText) findViewById(R.id.name);
            EditText passwort1 = (EditText) findViewById(R.id.passwort);
            EditText passwort2 = (EditText) findViewById(R.id.passwort2);
            passwort1.setFilters(new InputFilter[]{filter});

            //// TODO: 15.03.16 passwort auf länge und zeichen prüfen


            if (passwort1.getText().length() < 5 || passwort1.getText().length() > 20) {

                Toast.makeText(firtsStartActivity.this, "Das Passwort muss min 5 Zeichen und max. 20 lang sein", Toast.LENGTH_LONG).show();
                return;
            }
            //passwoerter auf gleichheit pruefen
            if (passwort1.getText().toString().equals(passwort2.getText().toString())) {
                //Passwoerter sind gleich
                //Daten werden gespeichert
                editor.putString("Name", name.getText().toString());
                editor.putString("Passwort", passwort1.getText().toString());
                editor.commit();

                passwortAbfrage();
            } else {
                //Passwoerter waren nicht identisch
                Toast.makeText(firtsStartActivity.this, "Passwörter stimmen nicht überein.", Toast.LENGTH_LONG).show();
            }
        }
    });
}

public void passwortAbfrage() {
setContentView(R.layout.login);
Button loginButton = (Button) findViewById(R.id.login);
loginButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Benutzer einloggen, wenn das Passwort richtig ist
EditText name = (EditText) findViewById(R.id.name);
EditText passwort = (EditText) findViewById(R.id.passwort);

        //pruefe, ob der Benutzer existiert
        if (pref.getString("Name", "").equals(name.getText().toString())) {
            //Benutzer existiert. Jetzt Passwort pruefen
            if (pref.getString("Passwort", "").equals(passwort.getText().toString())) {
                //Passwort war korrekt, dann zeige die App
                startApp();
            } else {
                //Passwort war nicht korrekt
                Toast.makeText(firtsStartActivity.this, "Passwort ist nicht korrekt!", Toast.LENGTH_LONG).show();
            }
        } else {
            //Name war nicht korrekt
            Toast.makeText(firtsStartActivity.this, "Der Benutzer existiert nicht!", Toast.LENGTH_LONG).show();
        }
    }
});

}
public void startApp(){
//toDoApp starten
//// TODO: 15.03.16 implementieren
//setContentView(R.layout.activity_firts_start);
setContentView(R.layout.appmain);
}

}

Ist wahrscheinlich nur eine Kleinigkeit.

Danke euch schon mal für die Hilfe.

Gruß

— geändert am 15.03.2016, 13:34:11

Antworten
Klaus
  • Blogger
  • Forum-Beiträge: 19.167

15.03.2016, 13:26:27 via App

Hallo Tobias M!

Herzlich Willkommen hier bei uns im Forum. :)

Bitte beachte, dass Threads mit nicht aussagekräftigem Titel bei uns üblicherweise den Regeln entsprechend entfernt werden. Ich bitte dich daher, deinen Threadtitel innerhalb der nächsten 24 Stunden, spätestens jedoch bei deinem nächsten Besuch noch etwas aussagekräftiger zu gestalten (Hierfür einfach unter deinem ersten Beitrag auf 'bearbeiten' klicken, dann kannst du oben noch mal den Titel anpassen)

Danke :)

| LG Klaus |
| Google Nexus 6P - Dirty Unicorns | Google Nexus 6 - Dirty Unicorns |
| Das AndroidPITiden-Buch | Die Androiden-Toolbox | AndroidPIT-Regeln |

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

15.03.2016, 17:12:43 via Website

Du hast doch den Filter definiert, dann kannst du diesen doch schon auf das EditText setzen, in der onCreate.
Damit hast du das Problem garnicht, da das EditText Feld dann die ausgeschlossenen Zeichen garnicht annimmt.

Und mal einen Tipp, statt Toasts lässt es sich bei Eingeabefeldern auch gut sowas verwenden:
https://www.androidpit.de/forum/630105/edittext-auf-inhalt-untersuchen-mit-fehlermeldung-show-error-message-on-edittext-required-field-programmatically

;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten

Empfohlene Artikel