Registrierung

#1
Moin ich versuche gerade ne Registrierung + einen Login für eine Android App zu schreiben.
Nun zu meinem Problem sobald ich die Daten eingebe Name, Handynr, Passwort kommt das logo das die Daten überprüft werden und bleibt an diesem Punkt stehen.Die zuvor eingegeben Daten kommen auch nie bei der Datenbank (Firebase) an.

Java:
public class RegisterActivity extends AppCompatActivity
{
    private Button CAB;
    private EditText name, email, pass;
    private ProgressDialog loading;


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


        CAB = findViewById(R.id.reg_btn);
        name =  findViewById(R.id.reg_user);
        pass = findViewById(R.id.reg_pass);
        email =  findViewById(R.id.reg_phone);
        loading = new ProgressDialog(this);


        CAB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                CreateAccount();
            }
        });
    }



    private void CreateAccount()
    {
        String nam = name.getText().toString();
        String emai = email.getText().toString();
        String pas = pass.getText().toString();

        if (TextUtils.isEmpty(nam))
        {
            Toast.makeText(this, "Bitte den Benutzernamen eingeben.", Toast.LENGTH_SHORT).show();
        }
        else if (TextUtils.isEmpty(emai))
        {
            Toast.makeText(this, "Bitte die Email Adresse eingeben", Toast.LENGTH_SHORT).show();
        }
        else if (TextUtils.isEmpty(pas))
        {
            Toast.makeText(this, "Bitte das Passwort eingeben", Toast.LENGTH_SHORT).show();
        }
        else
        {
            loading.setTitle("Erstelle Account");
            loading.setMessage("Bitte warten sie solange wir ihre Daten Prüfen.");
            loading.setCanceledOnTouchOutside(false);
            loading.show();

            ValidateEmail(nam, emai, pas);
        }
    }



    private void ValidateEmail(final String name, final String email, final String pass)
    {
        final DatabaseReference RootRef;
        RootRef = FirebaseDatabase.getInstance().getReference();

        RootRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot)
            {
                if (!(dataSnapshot.child("Users").child(email).exists()))
                {
                    HashMap<String, Object> userdataMap = new HashMap<>();
                    userdataMap.put("Email", email);
                    userdataMap.put("Passwort", pass);
                    userdataMap.put("Benutzername", name);

                    RootRef.child("Users").child(email).updateChildren(userdataMap)
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task)
                                {
                                    if (task.isSuccessful())
                                    {
                                        Toast.makeText(RegisterActivity.this, "Glückwunsch dein Account wurde erflogreich erstellt.", Toast.LENGTH_SHORT).show();
                                        loading.dismiss();

                                        Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
                                        startActivity(intent);
                                    }
                                    else
                                    {
                                        loading.dismiss();
                                        Toast.makeText(RegisterActivity.this, "Netzwerk Fehler: Bitte versuchen sie es zu einem späteren Zeitpunkt erneut.", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });
                }
                else
                {
                    Toast.makeText(RegisterActivity.this, "Diese " + email + " existiert bereits.", Toast.LENGTH_SHORT).show();
                    loading.dismiss();
                    Toast.makeText(RegisterActivity.this, "Bitte versuchen sie es mit einer anderen Email Adresse \n oder Kontaktieren sie den Support.", Toast.LENGTH_SHORT).show();

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

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}
 

lord_haffi

Well-Known Member
c-b Experte
#2
Also, ich hab' jetzt nicht so die Erfahrungen mit den Klassen, die du da benutzt und die offizielle API ist jetzt auch nicht wirklich immer detailliert...

Auf jeden Fall habe ich gesehen, ProgressDialog ist deprecated, da es die Interaktion mit dem Frontend unterbindet. Aufgrund dessen würde ich davon aus gehen, dass der in Zeile 56 bei nicht einfach weitermacht. Wenn du das möchtest, müsstest du eine andere Klasse benutzen (z.B. ProgressBar) - das wäre am besten - oder du lässt die Methode in einem separaten Thread (/ Runnable) ausführen.
 
Gefällt mir: Xeno
#3
Ich habe die registrierung nun umgeschrieben da ich es leider so nicht zum laufen bekommen habe. Nun habe ich das problem sobald ich die Abfrage mache das die passwörter übereinstimmen müssen funktioniert die Regi nicht mehr und sobald ich es auskommentiere klappt es.
Java:
public class RegisterActivity extends AppCompatActivity {

        EditText firstname,lastname,email,pass,conf_pass,phone;
        Button btnRegister;

        FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        mAuth =FirebaseAuth.getInstance();
        firstname = findViewById(R.id.insert_first_name);
        lastname = findViewById(R.id.insert_last_name);
        email   =   findViewById(R.id.insert_email);
        pass    =   findViewById(R.id.insert_password);
        conf_pass= findViewById(R.id.insert_conf_pass);
        phone = findViewById(R.id.insert_number);

        btnRegister = (Button) findViewById(R.id.btn_register);

        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (mAuth.getCurrentUser() != null) {

                            //Bla bla bla

                }else{
                    final String fname = firstname.getText().toString().trim();
                    final String lname = lastname.getText().toString().trim();
                    final String mail = email.getText().toString().trim();
                    final String pas = pass.getText().toString().trim();
                    final String c_pass = conf_pass.getText().toString().trim();
                    final String pho = phone.getText().toString().trim();

                    if (fname.isEmpty()) {
                        firstname.setError("Vornamen eingeben");
                        firstname.requestFocus();
                        return;
                    }
                    if (lname.isEmpty()) {
                        lastname.setError("Nachnamen eingeben");
                        lastname.requestFocus();
                        return;
                    }
                    if (mail.isEmpty()) {
                        email.setError("Email Adresse eingeben");
                        email.requestFocus();
                        return;
                    }
                    if (pas.isEmpty()) {
                        pass.setError("Passwort eingeben");
                        pass.requestFocus();
                        return;
                    }
                    if (c_pass.isEmpty()) {
                        conf_pass.setError("Passwort erneut eingeben");
                        conf_pass.requestFocus();
                        return;
                    }
                   if (!pas.equals(c_pass)) {
                        conf_pass.setError("Die Passwörter stimmen nicht überein");
                        conf_pass.requestFocus();
                        return;
                    }
                    if (pho.isEmpty()) {
                        phone.setError("Telefonnummer eingeben");
                        phone.requestFocus();
                        return;
                    }
                    mAuth.createUserWithEmailAndPassword(mail, pas).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {

                            if(task.isSuccessful()){

                                User user=new User(fname, lname, mail, pho);
                                FirebaseDatabase.getInstance().getReference("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                        .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {

                                        if(task.isSuccessful()){

                                            Toast.makeText(RegisterActivity.this, "Account wurde erfeolgreich erstellt.", Toast.LENGTH_LONG).show();

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

                                        }else{

                                            Toast.makeText(RegisterActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();

                                        }

                                    }
                                });

                            }else{

                                Toast.makeText(RegisterActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();

                            }

                        }
                    });
                }
            }
        });

    }
}
 

lord_haffi

Well-Known Member
c-b Experte
#4
Warum benutzt du denn trim() bei den Strings? Das ist eigentlich an dieser Stelle nicht so sinnvoll..
Was funktioniert denn dann nicht? Man braucht schon eine etwas genauere Fehlerbeschreibung als "Programm funzt net"..
 

lord_haffi

Well-Known Member
c-b Experte
#6
Weil trim alle nicht druckbare zeichen löscht.
Es löscht Whitespace am Anfang und Ende eines Strings. Das sollte aber hier nicht notwendig sein, oder?
Steht dort das es um die Passwort übereinstimmung geht
Wird ein Fehler geworfen? Oder sagt der, dass die Passwörter nicht übereinstimmen? Schon mal die Strings ausgeben lassen oder mit 'nem Debugger geguckt, wie die Werte da aussehen? Sehe zumindest jetzt nicht auf Anhieb, warum die if-Condition nicht funktionieren sollte..

Vielleicht liegt der Fehler ja auch woanders. Greifst du vielleicht auf die falschen Textfelder zu?
 
#7
Es wird kein Fehler oder Warning angezeigt. Der Debugger sagt nur beim login das ich dort einen Fatal Error habe wegen der Regi kommt nichts
 

lord_haffi

Well-Known Member
c-b Experte
#8
Der Debugger sagt nur beim login das ich dort einen Fatal Error habe
Dann wird ja doch ein Fehler geworfen, oder nicht? Normalerweise solltest du sehen können, was für ein Fehler geworfen wird zusammen mit dem Stacktrace. Sonst kannst du ja auch mal in 'nem try-catch den Fehler mit printStackTrace() auf die Konsole ausgeben lassen.
 
Gefällt mir: Xeno
#9
Ich habe die Registrierung hinbekommen was ein Wunder :D Nun habe ich das Problem das die Methode getUid(). eine Nullpointer Exception auswirft hat jemand eine Idee wie ich das hinbekomme. Sinn des Codes ist es ein M u. W Button einzufügen.

Java:
        mAuth = FirebaseAuth.getInstance();
        mAuthStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                final String name = uName.getText().toString();
                int selectID = uRadioGroup.getCheckedRadioButtonId();
                final RadioButton radioButton = findViewById(selectID);


                final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                try {
                    String userID = mAuth.getCurrentUser().getUid();
                    DatabaseReference currentUserDb = FirebaseDatabase.getInstance().getReference().child("Users").child(radioButton.getText().toString())
                            .child(userID).child("name");

                    currentUserDb.setValue(name);
                }catch (NullPointerException e){
                    e.printStackTrace();
                }
Ich hatte es vorher in der onComplete funktion aber mir wurde gesagt das es falsch sei und ich es in den AuthStateListener einfügen muss
 

lord_haffi

Well-Known Member
c-b Experte
#10
Nächstes Mal wäre es sehr hilfreich, wenn du den kompletten Fehler (einschließlich StackTrace) posten würdest. Ich gehe mal davon aus, der Fehler wird in Zeile 12 geworfen? Scheinbar gibt es keinen current User. Da der Login für das FirebaseAuth-Objekt nicht im Codeausschnitt drin ist, kann ich da auch jetzt nicht mehr zu sagen.
Was mir auffällt, ist, dass du in der Methode das Argument gar nicht verwendest, sondern entweder ein neues erstellst (was gar keinen Sinn ergibt?) oder auf mAuth zugreifst, was zwar vermutlich funktioniert, aber sehr unschön ist.
Wenn ich mich nicht irre, sollte final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); immer null ergeben.
Vielleicht liest du dir mal die API dazu durch...
 
Gefällt mir: Xeno
#11
Ich gucke 2 YT videos und habe 3 Srcs codes woraus ich mir die schnipsel zusammen suche und sie dann versuche bei mir zu integrieren.
Ich besitze lediglich die Grundkenntnisse in Java und entschuldige mich für meine Unwissenheit und meine Schreibweise. Ich danke dir für deine erneute antwort dank dir nimmt die App gestalt an.
Was ich nicht wirklich verstehe im YT video woraus ich diesen versuch habe funktioniert es einwandfrei. Ich schicke mal die komplette Login und RegisterActivity rein
 
#12
Java:
public class RegisterActivity extends AppCompatActivity {

    private Button regi_btn;
    private EditText umail, upass,upass_conf, uFirstname, uName, uDate, uPhone;
    private ProgressDialog loading;

    private RadioGroup uRadioGroup;

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthStateListener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        regi_btn = findViewById(R.id.btn_reg);
        umail = findViewById(R.id.email);
        upass = findViewById(R.id.pass);
        uName = findViewById(R.id.uname);


        uRadioGroup = findViewById(R.id.radioGroup);

        mAuth = FirebaseAuth.getInstance();
        mAuthStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                try {
                    final String name = uName.getText().toString();
                    int selectID = uRadioGroup.getCheckedRadioButtonId();
                    final RadioButton radioButton = findViewById(selectID);


                    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                    try {
                        final String userID = mAuth.getInstance().getCurrentUser().getUid();
                        DatabaseReference currentUserDb = FirebaseDatabase.getInstance().getReference().child("Users").child(radioButton.getText().toString())
                                .child(userID).child("name");

                        currentUserDb.setValue(name);


                        if (mAuth.getCurrentUser() != null) {
                            user = mAuth.getCurrentUser();
                        }
                    } catch (NullPointerException e) {
                        e.printStackTrace();


                    }


                    if (user != null) {
                        Intent intent4 = new Intent(RegisterActivity.this, MainActivity.class);
                        startActivity(intent4);
                        finish();
                    }

                }catch(Exception e){
                    e.printStackTrace();

                }
            }
        };

        regi_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final String email = umail.getText().toString();
                final String pass  = upass.getText().toString();

                mAuth.createUserWithEmailAndPassword(email, pass).addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        if(!task.isSuccessful()){

                            Toast.makeText(RegisterActivity.this, "sign_up_error" , Toast.LENGTH_SHORT).show();

                        }
                    }
                });
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        mAuth.addAuthStateListener(mAuthStateListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        mAuth.removeAuthStateListener(mAuthStateListener);
    }
}

Java:
public class LoginActivity extends AppCompatActivity {
    private AESCrypt en = new AESCrypt();
    private String test;
    private Button uLogin;
    private EditText umail, upass;

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

            final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            if(user != null){

                    Intent intent3 = new Intent(LoginActivity.this, HomeActivity.class);
                    startActivity(intent3);
                    finish();
                    return;


            }


        }
    };

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

        uLogin = findViewById(R.id.btn_log);

        umail = findViewById(R.id.email);
        upass = findViewById(R.id.pass);

        mAuth = FirebaseAuth.getInstance();
        try{
            uLogin.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {

                    final String email = umail.getText().toString();
                    final String pass  = upass.getText().toString();
                    mAuth.signInWithEmailAndPassword(email, pass).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if(!task.isSuccessful()){

                                Toast.makeText(LoginActivity.this, "sign_in_error" , Toast.LENGTH_SHORT).show();

                            }

                        }
                    });


                }
            });
        }catch(NullPointerException e){

            e.printStackTrace();

        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        mAuth.addAuthStateListener(mAuthStateListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        mAuth.removeAuthStateListener(mAuthStateListener);
    }
}

2019-08-14 17:06:47.754 10714-10714/? E/Zygote: isWhitelistProcess - Process is Whitelisted
2019-08-14 17:06:47.773 10714-10714/? E/Zygote: accessInfo : 1
2019-08-14 17:06:52.827 10714-10714/com.example.supermarketdiscounter E/EnhancedIntentService: binding to the service failed
 

lord_haffi

Well-Known Member
c-b Experte
#13
Wie gesagt. FirebaseAuth.getInstance() innerhalb deines onAuthStateChange-Listeners zu verwenden, ist mit Sicherheit falsch. Stattdessen solltest du deine schon vorhandene Instanz, mAuth, benutzen.
 
Oben