{
"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"
}
まず、これは私のJSONです。さて、問題は、私は新しいユーザーを登録しているときに、ユーザー名と電子メールの両方が以前に使用されていない(またはすでに存在する)場合にのみ登録を許可したいと思います。forループは、dataSnapshotの子をループするときに中断しないようです。
私はそれがMVPパターンを使用して、私はボタンを登録する]をクリックしたときにそう、それは適切な長さ/タイプのユーザ名/ EMAI /パスワードフィールドをチェックし、すべてのOKならば、それは発表者は、registerNewUserメソッドを呼び出しました:
@Override
public void registerNewUser(String username, String email, String password) {
interactor.checkIfUserExists(username, email, password);
}
その後、相互作用因子のchekIfUserExistsメソッドを呼び出します:
@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);
}
}
}
プレゼンターのメソッドonUserAlreadyExistsが呼び出されたときに、それだけで「このユーザー名または電子メールが既に使用されている」というエラーメッセージを設定し...とプレゼンターのメソッドonUserDoesNotExistが呼び出されたときには、相互作用を呼び出しますORS方法tryToRegister():
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);
}
私は、既存の電子メールや別のユーザー名を登録しようとした場合、それはループ破壊し、プレゼンターのonUserAlreadyExistsを呼び出します:さて、問題はループのためにこれである
@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();
}
});
}
既存のユーザー名と既存のメール以外のメールに登録しようとするとループが壊れ、ユーザー名や電子メールがすでに使用されていることがわかります既存のユーザー名と既存のメールがない新しいユーザーを作成します...ここに何か不足していますか?
ありがとうジュリアン! :)それは私が思ったことです...これは、このように修正されました:if(user.getUsername()。equals(username)|| user.getEmail()。equals(email)){ exists = true; 休憩。 } else { が存在する= false; (存在する場合){ presenter.onUserAlreadyExists(); } } else { presenter.onUserDoesNotExist(ユーザー名、メールアドレス、パスワード); } – joe
確実なもの! :)あなたのためにすべてがうまくいけば、この答えを正しいものとしてマークすることを忘れないでください。 –
それは働いている! :)乾杯! – joe