即使数据相同,也会在Firebase中存储不同类型的数据

时间:2018-03-29 06:08:15

标签: java android firebase firebase-realtime-database

身份验证

String number = mPhoneNumberField.getText().toString();
        Intent i = new Intent(MainActivity.this, SetUpProfile.class);
        i.putExtra("Phone_Number", number);
        startActivity(i);
        finish();

传递

 final String mNumber = getIntent().getStringExtra("Phone_Number");

存储

  mdatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(mNumber);
addData.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            String name = input_name.getText().toString();
            String email = input_email.getText().toString();
            String status = input_status.getText().toString();
            String quote = input_quote.getText().toString();

            HashMap<String, String> userMap = new HashMap<>();
            userMap.put("Unique",Uid);
            userMap.put("Name",name);
            userMap.put("Status", "Hey There");
            userMap.put("Image", "Default");
            userMap.put("Thumb_image", "Default");
            userMap.put("Phone_Number", mNumber);

获取

 Intent intent = new Intent(getActivity(), Chat.class);
            String name = (String)parent.getItemAtPosition(position);
            String rId = (String)parent.getItemAtPosition(position);
            //Log.d("TAAAAG", rId);
            intent.putExtra("Recievers_Id", rId);
            intent.putExtra("Recievers_Name", name);

下一个活动

 MessageSenderId = mAuth.getCurrentUser().getPhoneNumber();
    MessageRecieverId = getIntent().getStringExtra("Recievers_Id");

rootRef.child("Chats").child(MessageSenderId).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (!dataSnapshot.hasChild(MessageRecieverId)) {

                Map chatAddMap = new HashMap();
                chatAddMap.put("Seen", false);
                chatAddMap.put("Timestamp", ServerValue.TIMESTAMP);

                Map chatUserMap = new HashMap();
                chatUserMap.put("Chat/" + MessageSenderId + "/" + MessageRecieverId, chatAddMap);
                chatUserMap.put("Chat/" + MessageRecieverId + "/" + MessageSenderId, chatAddMap);

                rootRef.updateChildren(chatUserMap, new DatabaseReference.CompletionListener() {
                    @Override
                    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                        if (databaseError != null) {
                            Log.d("Chat_Log", databaseError.getMessage().toString());
                        }
                        messageArea.setText("");
                    }
                });
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

注册时,+ 91正在添加到数据库...但是当我尝试获取它时没有+91的提取...因此它完全弄乱了数据。如何获取包括+91的数字或在验证时删除91 ...如果你需要查看我的代码请询问。

91是国家/地区代码,因此我希望获取国家/地区代码,而不是仅删除国家/地区代码

http://ibb.co/ngnyLS

1 个答案:

答案 0 :(得分:0)

通过检查您的结构,您可以看到用户仅通过“1212121212”进行注册, 聊天和消息中的相同条目 ,但不是“+ 91 1212121212”的情况

在创建聊天孩子时,您正在传递mNumber “+ 91 1212121212” 在提取时,您要求mAuth.getCurrentUser().getPhoneNumber(); “1212121212”

添加和检索数据时请保持一致性, 从您的数据库中可以清楚地看到用户在没有“+91”的情况下注册,请在那里进行更改,或者更改聊天子项创建密钥。