Как получить данные пользователя c при открытии карты - PullRequest
1 голос
/ 25 февраля 2020

Я ищу пользователя по имени или электронной почте и нажимаю на эту карточку. Я хочу, чтобы на экране отображались данные пользователя из firebase. Как мне получить идентификатор этого пользователя на основе этого? Я использовал пакет, но получаю ошибку.

Вот мой код для отдельной страницы.

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) {

            }
        });
    }
}

Вот viewHolder.

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)

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020
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, куда вы хотите показать.

0 голосов
/ 25 февраля 2020

Вы пытаетесь получить доступ к значению, которое ранее не было сохранено в пакете. Перед началом действия вы должны использовать что-то вроде:

intent.putExtra("userId", name.getText().toString());

Или вместо name.getText (). ToString (), вы должны указать имя, которое вы будете загружать из другого класса. Это сохранит значение, и вы сможете получить к нему доступ позже.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...