我是Firebase的新手,所以请多多包涵。我正在使用Android Studio中的Firebase实时数据库进行注册。我想做的是,当用户输入她的名字和姓氏时,系统将通过使用名字的第一个字符并将其与姓氏连接来设置用户名。
示例: 姓名:约翰·史密斯 用户名:jsmith
在某些情况下,用户名会重复,因为以J开头的姓氏为Smith的名字太多。所以我想要的是在用户名已经存在的情况下添加一个整数。
jsmith,jsmith1,jsmith2等...
我知道我需要添加一个循环,但是我只是不知道如何构造它。这是我的代码:
public void insertAccount(){
acctstatus.setText("Active");
accttype.setText("Employee");
final String status = acctstatus.getText().toString();
final String type = accttype.getText().toString();
final String lname = empLname.getText().toString();
final String fname = empFname.getText().toString();
final String newfname = fname.substring(0,1).toLowerCase();
final String newuname = newfname+lname.toLowerCase();
// empuname.setText(newuname);
// final String uname = empuname.getText().toString();
// String passw = UUID.randomUUID().toString().substring(0,5);
// emppassw.setText(passw);
// String newpassw = emppassw.getText().toString();
String newpassw = newuname;
//
final int num = 0;
accountFirebaseReference.orderByChild("acct_uname").equalTo(newuname)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
String username = newuname+num+1;
empuname.setText(username);
final String acctuname = empuname.getText().toString();
Toast.makeText(getApplicationContext(), "Username: "+acctuname, Toast.LENGTH_LONG).show();
}else{
String username = newuname;
empuname.setText(username);
Toast.makeText(getApplicationContext(), "Username: "+empuname, Toast.LENGTH_LONG).show();
}
}
final String acctuname = empuname.getText().toString();
final String acctpassw = empuname.getText().toString();
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
//addAccount(newuname, newpassw, type, status);
}
答案 0 :(得分:1)
仅是一个建议。如果存在用户名,请添加01
,例如jDoe01
,jDoe02
....然后是jDoe011
,等等。
然后,如果存在文档,则获取该零的索引(它将始终存在)
您可以使用类似int index = yourUserNameFromFirebase.indexOf('0');
然后,您可以使用该索引通过执行子字符串从文档中获取编号:
String numberValue = yourUserNameFromFirebase.substring(index);
int countOfDuplicateNames = Integer.valueOf(numberValue);
然后,您可以简单地增加countOfDuplicateNames
并创建一个新用户,只需记住要始终确保0
在那,因为这是获取该数字的唯一方法。
要对其进行伪编码,您的新用户名将如下所示:
initial + surname + '0' + countOfDuplicateNames+1
注意
很抱歉,此答案不适合从索引1
开始:D