Java 如何获取特定用户';打开卡片视图时显示数据

Java 如何获取特定用户';打开卡片视图时显示数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我根据姓名或电子邮件搜索用户,然后单击该卡片视图。我希望屏幕显示来自firebase的用户数据。 如何基于此获取该用户的Id?我使用了一个包,但我得到了一个错误 这是我个人页面的代码 public class UserSingleActivity extends AppCompatActivity { private Button btnsendFriendRequest; private TextView displayName,displayEmail,displayId;

我根据姓名或电子邮件搜索用户,然后单击该卡片视图。我希望屏幕显示来自firebase的用户数据。 如何基于此获取该用户的Id?我使用了一个包,但我得到了一个错误

这是我个人页面的代码

public class UserSingleActivity extends AppCompatActivity {
    private Button btnsendFriendRequest;
    private TextView displayName,displayEmail,displayId;
    private DatabaseReference mUserDatabase;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_single);

        //.....

        //Here is the error
        String userId=getIntent().getExtras().getString("userId");//look for the user Id

        mUserDatabase= FirebaseDatabase.getInstance().getReference().child("users").child(userId);

        mUserDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String display_name=dataSnapshot.child("name").getValue().toString();
                String display_email=dataSnapshot.child("email").getValue().toString();
                displayName.setText(display_name);
                displayEmail.setText(display_email);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}
这是取景器

public class FriendsViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener {

    private DatabaseReference userDB;
    public TextView name,email,userId;

    public FriendsViewHolders(@NonNull View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);

        name = (TextView)itemView.findViewById(R.id.name);
        email = (TextView)itemView.findViewById(R.id.email);

    }
    @Override
    public void onClick(View v) {
        Intent intent=new Intent(v.getContext(), UserSingleActivity.class);
        v.getContext().startActivity(intent);

    }
}
这里是错误

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
        at com.example.android.myapplication.UserSingleActivity.onCreate(UserSingleActivity.java:29)

您正在尝试访问以前未保存在捆绑包中的值。 在开始活动之前,您应该使用以下方法:

intent.putExtra("userId", name.getText().toString());
或者,您应该输入将从另一个类加载的名称,而不是name.getText().toString()。 这将保存该值,您以后应该可以访问它


希望有帮助

您正在尝试访问以前未保存在捆绑包中的值。
mUserDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String display_name=dataSnapshot.child("name").getValue().toString();
                String display_email=dataSnapshot.child("email").getValue().toString();
                displayName.setText(display_name);
                displayEmail.setText(display_email);
            }
在开始活动之前,您应该使用以下方法:

intent.putExtra("userId", name.getText().toString());
或者,您应该输入将从另一个类加载的名称,而不是name.getText().toString()。 这将保存该值,您以后应该可以访问它

希望有帮助

mUserDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String display_name=dataSnapshot.child("name").getValue().toString();
                String display_email=dataSnapshot.child("email").getValue().toString();
                displayName.setText(display_name);
                displayEmail.setText(display_email);
            }
当您执行以下操作时,从上面的代码

String display_name=dataSnapshot.child("name").getValue().toString();
                String display_email=dataSnapshot.child("email").getValue().toString();
将此发送到要显示的其他classAdapter

当您执行以下操作时,从上面的代码

String display_name=dataSnapshot.child("name").getValue().toString();
                String display_email=dataSnapshot.child("email").getValue().toString();

将此信息发送到您要显示的其他classAdapter。

我不确定是否正确理解此信息,但我的用户名不是名称。我确实试着把
intent.putExtra(“userId”,userId.getText().toString())
但由于我不希望屏幕显示userId,因此我没有为userId创建textView,因此在
userId.getText()
您试图访问一个名为“userId”的对象时出错,但是,在启动活动之前,您没有向意图添加任何名为“userId”的内容。如果您使用
intent.putExtra(“userId”,“This is the id”)
,您将加载“This is the id”,而不是获取错误抱歉,我有点困惑
intent.putExtra(“userId”,“这就是id”)
我是在viewHolder类还是userSingleActivity中添加这行代码?我是否仍然需要
字符串userId=getIntent().getExtras().getString(“userId”)?还有,谢谢你的帮助!在viewHolder中,在
Intent Intent=new Intent(v.getContext(),UserSingleActivity.class)之间
v.getContext().startActivity(intent)。您仍然需要
stringuserid=getIntent().getExtras().getString(“userId”)
我这样做了,但随后出现错误
尝试调用空对象引用上的虚拟方法“java.lang.String java.lang.Object.toString()”
字符串显示\u name=dataSnapshot.child(“name”).getValue().toString()我不确定我是否正确理解这一点,但我的用户名不是名称。我确实试着把
intent.putExtra(“userId”,userId.getText().toString())
但由于我不希望屏幕显示userId,因此我没有为userId创建textView,因此在
userId.getText()
您试图访问一个名为“userId”的对象时出错,但是,在启动活动之前,您没有向意图添加任何名为“userId”的内容。如果您使用
intent.putExtra(“userId”,“This is the id”)
,您将加载“This is the id”,而不是获取错误抱歉,我有点困惑
intent.putExtra(“userId”,“这就是id”)
我是在viewHolder类还是userSingleActivity中添加这行代码?我是否仍然需要
字符串userId=getIntent().getExtras().getString(“userId”)?还有,谢谢你的帮助!在viewHolder中,在
Intent Intent=new Intent(v.getContext(),UserSingleActivity.class)之间
v.getContext().startActivity(intent)。您仍然需要
stringuserid=getIntent().getExtras().getString(“userId”)
我这样做了,但随后出现错误
尝试调用空对象引用上的虚拟方法“java.lang.String java.lang.Object.toString()”
字符串显示\u name=dataSnapshot.child(“name”).getValue().toString()如何将
用户ID
添加到
意图
?如何将
用户ID
添加到
意图
?感谢您的帮助。如何将其发送到适配器?抱歉,我对此很陌生。请将数据发送到参数化构造函数。。。新MyAdapterClass(姓名、年龄、职务);谢谢你的帮助。如何将其发送到适配器?抱歉,我对此很陌生。请将数据发送到参数化构造函数。。。新MyAdapterClass(姓名、年龄、职务);