【问题标题】:i want to get the user unique id. how do i fetch it using getKey method我想获取用户的唯一 ID。我如何使用 getKey 方法获取它
【发布时间】:2018-02-05 14:35:49
【问题描述】:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usersRef = rootRef.child("Users");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            ListView listView = (ListView) rootView.findViewById(R.id.usersList);
            ArrayAdapter<String> adapter;
            adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, al);
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                name = ds.child("Name").getValue().toString();

//                    Log.d("TAG", name);
                al.add(name);
                String list_user_id = getRef(position).getKey();
            }
            listView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(getActivity(),"Please Check Your Internet Connection",Toast.LENGTH_SHORT).show();
        }
    };
    usersRef.addListenerForSingleValueEvent(eventListener);

在字符串 list_user_id = getRef(Position).getKey() 的行中:我猜这是返回 null 因为当用户点击列表视图中的项目时

 usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            UserDetails.chatWith = al.get(position);
            Intent intent = new Intent(getActivity(), Chat.class);
            intent.putExtra("visit_user_id",list_user_id);
            intent.putExtra("user_name",name);
            startActivity(intent);
        }
    });
    return rootView;

他将被定向到聊天活动...一旦我打开聊天活动,我就会在此行收到空指针异常

   MessageRecieverId = getIntent().getExtras().get("visit_user_id").toString();

我哪里出错了?试图制作一个聊天应用程序,因此需要获取用户的唯一 ID... 数据库截图http://ibb.co/cwOQtx

再次出现空错误

rootRef.child("Messages").child(MessageSenderId).child(MessageRecieverId)
            .addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Messages messages = dataSnapshot.getValue(Messages.class);
            messagesList.add(messages);
            messageAdapter.notifyDataSetChanged();
        }

rootref.chil("messages")........行中的错误 错误-http://ibb.co/h4D2dx

【问题讨论】:

    标签: java android firebase firebase-realtime-database nullpointerexception


    【解决方案1】:

    更改代码(在 ValueEventListener 内部):

    String list_user_id = getRef(position).getKey();
    

    到这里:

    String list_user_id = ds.getKey();
    

    for(DataSnapshot ds : dataSnapshot.getChildren()) ds 这里是在作为唯一 ID 的直接子代中进行迭代,然后通过使用上面的方法,您将能够检索唯一 ID。

    也根据 firebase 文档:

    getRef() 不接受任何参数。

    更多信息在这里:-

    https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#getRef()

    【讨论】:

    • @PeterHadded:很可能 sn-p 是使用 FirebaseUI 从代码中复制的。该库中的适配器有一个 getRef() 方法,该方法获取项目的位置以获取参考。
    • @CourtneyMiller 你在哪里得到空值?在这条线上MessageRecieverId = getIntent().getExtras().get("visit_user_id").toString();?试试这个然后String recieved=getIntent().getStringExtra("visit_user_id");。上面的答案应该是正确的,它应该给你你想要的 id。您需要在空行上添加断点以查看其为空的原因。但上述内容肯定会恢复。然后你使用 putExtra 将数据发送到下一个活动。在下一个活动中你得到空值,在答案和评论中尝试这个并添加一个断点以检查更多是否它不起作用
    • 又是一个空错误...你能看看编辑过的问题并帮助我吗????
    • @CourtneyMiller 编辑与原版完全不同???在onChildAdded 里面初始化适配器并设置适配器。例如这个adapter = new ArrayAdapter&lt;String&gt;(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, al);和这个list.setAdapter(adapter);
    • @CourtneyMiller remove child(MessageRecieverId) 还有 AkashSavitha 不是 ids.. 删除那些
    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 2021-03-12
    • 2020-01-16
    • 2011-08-03
    • 2020-01-30
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多