{
"Users" : {
"750bf295-1a99-4b0f-a072-cae87d25f53e" : {
"email" : "[email protected]",
"hotel" : {
"Island" : {
"author" : "Jole",
"comfort" : 5.0,
"food" : 2.0,
"latit" : 65.05243844618913,
"longit" : -19.647914953529835,
"name" : "Island",
"rating" : 3.0,
"review" : "OK nije los",
"service" : 2.0
},
},
"password" : "aa",
"username" : "Jole"
},
"8b76cd9e-6738-412d-9e55-986b1fe967f9" : {
"email" : "[email protected]",
"hotel" : {
"Bologna" : {
"author" : "oooo",
"comfort" : 3.0,
"food" : 3.5,
"latit" : 44.507442,
"longit" : 11.348376,
"name" : "Bologna",
"rating" : 3.3333332538604736,
"review" : "woooooooow",
"service" : 3.5
},
"Lodz" : {
"author" : "oooo",
"comfort" : 5.0,
"food" : 1.5,
"latit" : 51.759325127252225,
"longit" : 19.455432258546352,
"name" : "Lodz",
"rating" : 3.3333332538604736,
"review" : "losa hrana",
"service" : 3.5
}
},
"password" : "oooo",
"username" : "oooo"
}
Zunächst ist dies mein JSON. Nun, das Problem ist, wenn ich einen neuen Benutzer registriere, möchte ich die Registrierung nur zulassen, wenn Benutzername und E-Mail nie zuvor benutzt wurden (oder wenn beide bereits existieren).für Schleife scheint wie wird nicht aufhören, beim Schleifen DataSnapshot Kinder
Ich habe es MVP-Muster verwenden, so dass, wenn ich Taste registrieren, klicken, überprüft er Benutzername/emai/Passwort-Felder für die richtige Länge/Typ und wenn alles in Ordnung ist, ruft sie Moderators RegisterNewUser Methode:
@Override
public void registerNewUser(String username, String email, String password) {
interactor.checkIfUserExists(username, email, password);
}
die ruft dann Interaktorsystem die chekIfUserExists Methode:
@Override
public void checkIfUserExists(final String username, final String email, final String password) {
Firebase userRef = new Firebase("https://josip-my-application.firebaseio.com/Users/");
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
if (email.equals(user.getEmail()) || username.equals(user.getUsername())) {
presenter.onUserAlreadyExists();
break;
} else {
presenter.onUserDoesNotExist(username, email, password);
}
}
}
wenn Methode des Moderators onUserAlreadyExists genannt wird, setzt sie nur Fehlermeldungen „dieser Benutzername oder E-Mail bereits verwendet wird,“ ... und wenn Moderationsmethode onUserDoesNotExist aufgerufen wird es nennt interact ors Methode tryToRegister():
@Override
public void tryToRegister(final String username, final String email, final String password) {
userRef.createUser(email, password, new Firebase.ValueResultHandler<Map<String, Object>>() {
@Override
public void onSuccess(Map<String, Object> stringObjectMap) {
String uid = stringObjectMap.get("uid").toString();
userRef = new Firebase("https://josip-my-application.firebaseio.com/Users/" + uid);
userRef.setValue(createUser(username, email, password));
presenter.onSuccess(email, username);
}
@Override
public void onError(FirebaseError firebaseError) {
presenter.onFailure();
}
});
}
Nun, das Problem in dieser for-Schleife ist:
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
if (email.equals(user.getEmail()) || username.equals(user.getUsername())) {
presenter.onUserAlreadyExists();
break;
} else {
presenter.onUserDoesNotExist(username, email, password);
}
Wenn ich mit den bestehenden E-Mail und anderen Benutzernamen versuchen zu registrieren, ist es die Schleife bricht und ruft Moderators onUserAlreadyExists Methode und sagt mir, dass Benutzername oder E-Mail bereits verwendet und neue Benutzer nicht erstellt wird, aber wenn ich versuche, mit bestehenden Benutzernamen und nicht vorhandenen E-Mail zu registrieren, bricht es die Schleife, sagt mir, dass Benutzername oder E-Mail bereits verwendet wird UND dann es erstellt einen neuen Benutzer mit bestehendem Benutzernamen und nicht existierender E-Mail ... fehle ich hier etwas?
Danke Julian! :) Ja, das ist, was ich dachte ... es auf diese Weise behoben: if (user.getUsername(). Equals (Benutzername) || user.getEmail(). Equals (Email)) { exists = true; Pause; } sonst { existiert = false; } } wenn (existiert) { presenter.onUserAlreadyExists(); } else { presenter.onUserDoesNotExist (Benutzername, E-Mail, Passwort); } – joe
sicher Ding! :) Wenn alles für dich gelaufen ist, vergiss nicht, diese Antwort als richtig zu markieren. –
Es funktioniert! :) Prost! – joe