我尝试生成ID(自动增量)来替换唯一ID。有人可以帮我解决这个问题吗?谢谢!
public void SignUp(){
int UserCount = 1;
String identifier ="User" + UserCount;
Firebase userRef = firebaseRef.child("Users");
EditText nameInput = (EditText) findViewById(R.id.nameTxt);
String name = nameInput.getText().toString();
EditText passInput = (EditText) findViewById(R.id.passwordTxt);
String password = passInput.getText().toString();
EditText addrInput = (EditText) findViewById(R.id.addressTxt);
String address = addrInput.getText().toString();
if (!name.equals("")){
Map<String, String> infor= new HashMap<String, String>();
caloocan.put("Usersname", name);
caloocan.put("Userspassword", password);
caloocan.put("Usersaddress", address);
Map<String, Map<String, String>> users = new HashMap<String, Map<String, String>>();
users.put(identifier,infor);
userRef.setValue(users);
UserCount++;
}
}
Unique ID which is generated by Firebase
Generate the ID by using auto-increment just like I'm using in SQL database
答案 0 :(得分:1)
如果您真的想避免使用push()
方法,那么您需要在设置值之前从数据库中检索所有用户。
以下是如何做到的
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int count = dataSnapshot.getChildrenCount() + 1;
String identifier = "User" + count;
// save the new user
userRef.setValue( ... );
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 1 :(得分:0)
你可以试试这个:
final DatabaseReference firebaseRef = FirebaseDatabase.getInstance().getReference();
final DatabaseReference mCounterRef = firebaseRef.child("counter");
// listen for single change
mCounterRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// getValue() returns Long
long count = (long) dataSnapshot.child("Users").getValue();
System.out.println("count before setValue()=" + count);
mCounterRef.child("count").setValue(++count); // <= Change to ++count
System.out.println("count after setValue()=" + count);
}
@Override
public void onCancelled(DatabaseError databaseError) {
// throw an error if setValue() is rejected
throw databaseError.toException();
}
});
如果应用程序在运行时崩溃,那么您应该添加此部分:
mCounterRef.child("users").setValue(++count, new
DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError,
DatabaseReference databaseReference) {
if (databaseError != null) {
System.out.println("Error: " + databaseError.getMessage());
}
}
});