私はFirebaseをまったく使用したことがなく、書き込みタスクが成功したかどうかを確認する方法を知る必要があります。成功しなかった場合、MainActivity
が起動し、Register
の進行状況が台無しになります。
これにより、Username
が既に取得されているかどうかがチェックされ、取得されていない場合はユーザーが登録されます。
_Query usernamequery = myRef.orderByChild("Username").equalTo(Username);
usernamequery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.exists()) {
// TODO: handle the case where the data already exists
editText.setError("Username taken!");
return;
}
else {
// TODO: handle the case where the data does not yet exist
myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());
myRef.child("Users").child(Username).child("Username").setValue(Username);
startActivity(maps);
finish();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Username.this, "Error", Toast.LENGTH_LONG).show();
}
});
_
ただし、Intent to Mainアクティビティ(マップ)は、myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());
の場合にのみ起動する必要があります。
もう1つはタスクを終了し、成功しています。
私に何ができる?
書き込み操作がいつ完了したかを知るには、完了リスナーを追加します。
_myRef.child("Users").child(Username).child("Userid").setValue(user.getUid(), new DatabaseReference.CompletionListener() {
void onComplete(DatabaseError error, DatabaseReference ref) {
System.out.println("Value was set. Error = "+error);
}
});
_
1回の操作で複数の場所に書き込む場合は、update()
メソッドを確認する必要があります: https://firebase.google.com/docs/database/Android/読み取りと書き込み#updating_or_deleting_data
setValue()
の正しいオーバーロードは、ここに記載されています: https://firebase.google.com/docs/reference/Android/com/google/firebase/database/DatabaseReference.html#setValue(Java .lang.Object、%20com.google.firebase.database.DatabaseReference.CompletionListener)