Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调试器显示空值,尽管Firebase数据库中有值_Java_Android_Android Studio_Debugging_Firebase Realtime Database - Fatal编程技术网

Java 调试器显示空值,尽管Firebase数据库中有值

Java 调试器显示空值,尽管Firebase数据库中有值,java,android,android-studio,debugging,firebase-realtime-database,Java,Android,Android Studio,Debugging,Firebase Realtime Database,我试图通过intent发送一个值,但我的应用程序崩溃了。因此,我尝试检查调试器中的值,它显示为null。这是图片 正如您所看到的,它显示了userId=“null”和profilephotoURl=“null”为什么会发生这种情况? 这是数据库的图像 这是密码 ProfileInfo.class public class ProfileInfo { String userName, profilePhotoUrl, phoneNumber, userId; public ProfileI

我试图通过intent发送一个值,但我的应用程序崩溃了。因此,我尝试检查调试器中的值,它显示为null。这是图片

正如您所看到的,它显示了
userId=“null”
profilephotoURl=“null”
为什么会发生这种情况?

这是数据库的图像

这是密码

ProfileInfo.class

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;
}
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());
        holder.id.setText(profileInfo.getUserId());
        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());
                Log.d("UserID:", profileInfo.getUserId());
                context.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return minfo.size();
    }

    static class ViewHolder extends RecyclerView.ViewHolder {

        TextView username;
        TextView phoneNumber, id;
        CircleImageView profileImage;
        RelativeLayout relativeLayout;

        ViewHolder(@NonNull View itemView) {
            super(itemView);
            username = itemView.findViewById(R.id.user);
            phoneNumber = itemView.findViewById(R.id.phone);
            id = itemView.findViewById(R.id.id);
            profileImage = itemView.findViewById(R.id.circleProfileImage);
            relativeLayout = itemView.findViewById(R.id.relativeLayout);

        }
    }
}
public class MessageLayout extends AppCompatActivity {

    FirebaseUser currentUser;
    DatabaseReference db, chatDb;
    EditText message;
    ImageButton sendMessage;
    TextView username;
    CircleImageView profileImage;
    String recieverId, messageText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_message_layout);

        message = findViewById(R.id.editTextMessage);
        sendMessage = findViewById(R.id.sendMessage);
        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) {

            }
        });

    }
UserAdapter.class

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;
}
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());
        holder.id.setText(profileInfo.getUserId());
        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());
                Log.d("UserID:", profileInfo.getUserId());
                context.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return minfo.size();
    }

    static class ViewHolder extends RecyclerView.ViewHolder {

        TextView username;
        TextView phoneNumber, id;
        CircleImageView profileImage;
        RelativeLayout relativeLayout;

        ViewHolder(@NonNull View itemView) {
            super(itemView);
            username = itemView.findViewById(R.id.user);
            phoneNumber = itemView.findViewById(R.id.phone);
            id = itemView.findViewById(R.id.id);
            profileImage = itemView.findViewById(R.id.circleProfileImage);
            relativeLayout = itemView.findViewById(R.id.relativeLayout);

        }
    }
}
public class MessageLayout extends AppCompatActivity {

    FirebaseUser currentUser;
    DatabaseReference db, chatDb;
    EditText message;
    ImageButton sendMessage;
    TextView username;
    CircleImageView profileImage;
    String recieverId, messageText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_message_layout);

        message = findViewById(R.id.editTextMessage);
        sendMessage = findViewById(R.id.sendMessage);
        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) {

            }
        });

    }

在模型类中,应该有一个参数化构造函数。请尝试注释第二个参数化构造函数,看看这是否有帮助。

问题出在构造函数中。似乎您的datasnapshot正在使用您的
ProfileInfo(字符串用户名、字符串电话号码)
构造函数进行转换

下面是您可以做的:确保模型类中只有两个构造函数:常规的无参数构造函数和完整的构造函数。大概是这样的:

public ProfileInfo() {}

public ProfileInfo(String userName, String profilePhotoUrl, String phoneNumber, String userId) {
    this.userName = userName;
    this.profilePhotoUrl = profilePhotoUrl;
    this.phoneNumber = phoneNumber;
    this.userId = userId;
}

然后,运行您的代码并重试。

在哪一行代码中获取这些空值?@AlexMamo在UserAdapter.class中,当我试图通过InputHanks发送值以征求您的建议时。但是我想知道,如果我必须使用带有用户名和电话号码的构造函数,我应该怎么做?我应该将其他值传递为null吗?将其他值传递为null很酷,但是如果您对任何null变量执行任何get()操作,您的应用程序都有崩溃的风险。更好的方法是在它们为null时为它们设置默认值。例如,“还没有设置”。我相信应该有比这更好的方法,但这是我目前能想到的最好的方法。。。另外,它保证能工作。谢谢你的建议。我一定要去尝尝。