【发布时间】:2020-05-25 09:54:57
【问题描述】:
如您所见,我的数据库中有数据,userId 和 profilePhotoUrl 有值,但在我的调试器中,它显示为 null,如下图所示。谁能告诉我为什么会这样?
这是代码,您可以在调试器中看到用户名和电话号码,但 userId 和 profilephoto 值为 null
public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.ViewHolder> {
private ArrayList<ProfileInfo> minfo;
public static final String USER_ID = "userid";
Context context;
public UsersAdapter(Context context, ArrayList<ProfileInfo> minfo) {
this.context = context;
this.minfo = minfo;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_item, parent, false);
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(lp);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
final ProfileInfo profileInfo = minfo.get(position);
holder.username.setText(profileInfo.getUserName());
holder.phoneNumber.setText(profileInfo.getPhoneNumber());
Picasso.get().load(profileInfo.getProfilePhotoUrl()).
centerCrop().
into(holder.profileImage);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, MessageLayout.class);
intent.putExtra(USER_ID, profileInfo.getUserId());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return minfo.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView username;
TextView phoneNumber;
CircleImageView profileImage;
RelativeLayout relativeLayout;
ViewHolder(@NonNull View itemView) {
super(itemView);
username = itemView.findViewById(R.id.user);
phoneNumber = itemView.findViewById(R.id.phone);
profileImage = itemView.findViewById(R.id.circleProfileImage);
relativeLayout = itemView.findViewById(R.id.relativeLayout);
}
}
}
这是我试图从数据库中获取数据的代码。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message_layout);
username = findViewById(R.id.displayUsername);
profileImage = findViewById(R.id.circledp);
currentUser = FirebaseAuth.getInstance().getCurrentUser();
Intent intent = getIntent();
recieverId = intent.getStringExtra(UsersAdapter.USER_ID);
db = FirebaseDatabase.getInstance().getReference().child("UserInfo").child(recieverId);
chatDb = FirebaseDatabase.getInstance().getReference().child("Chats");
db.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
ProfileInfo info = dataSnapshot.getValue(ProfileInfo.class);
username.setText(info.getUserName());
Glide.with(MessageLayout.this).load(info.getProfilePhotoUrl()).into(profileImage);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
ProfileInfo 类代码
public class ProfileInfo {
String userName, profilePhotoUrl, phoneNumber, userId;
public ProfileInfo() {}
public ProfileInfo(String userName, String profilePhotoUrl, String phoneNumber, String userId) {
this.userName = userName;
this.profilePhotoUrl = profilePhotoUrl;
this.phoneNumber = phoneNumber;
this.userId = userId;
}
public ProfileInfo(String userName, String phoneNumber) {
this.userName = userName;
this.phoneNumber = phoneNumber;
}
public String getUserId() {
return userId;
}
public String getPhoneNumber() {
return phoneNumber;
}
public String getUserName() {
return userName;
}
public String getProfilePhotoUrl() {
return profilePhotoUrl;
}
}
【问题讨论】:
-
"谁能告诉我为什么会这样?" - 可能很多人都可以提供帮助,您的问题中的相关代码。
-
@MarkKeen 我已添加代码,请查看。
-
@HarshAshra 我认为您的适配器代码看起来不错,但这不是您从数据库中获取值的地方。您应该发布数据库获取的代码。在这里,只要 minfo 输入正确,就会显示你的结果。
-
@bengongon97 我已经添加了要获取数据的代码。
-
如果你尝试在
onDataChange()里面使用Log.d("TAG", infogetProfilePhotoUrl()),是不是在logcat中打印出来了?
标签: android android-studio debugging firebase-realtime-database