如何在用户名字符串旁边添加自动增量整数?

时间:2019-08-08 15:33:48

标签: android firebase-realtime-database

我是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);

    }

1 个答案:

答案 0 :(得分:1)

仅是一个建议。如果存在用户名,请添加01,例如jDoe01jDoe02 ....然后是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