Java 无法使用RecyclerAdapter将对象转换为字符串值

Java 无法使用RecyclerAdapter将对象转换为字符串值,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我试图在我的Android应用程序Fragment中显示Firebase实时数据库中的所有用户,该应用程序名为RequestFragment。但是,应用程序没有显示任何内容,我在日志中看到的错误是: 无法将用户对象转换为字符串值 有人可以检查下面的代码,让我知道什么可能是一个问题吗 下面的代码包括Fragmentclass、ViewHolderclass、Userclass、布局xml和应用程序渐变文件。我正在使用SDK 28,并将我的三星galaxy A6(2017)手机作为设备 public

我试图在我的Android应用程序
Fragment
中显示Firebase实时数据库中的所有用户,该应用程序名为
RequestFragment
。但是,应用程序没有显示任何内容,我在日志中看到的错误是:

无法将用户对象转换为字符串值

有人可以检查下面的代码,让我知道什么可能是一个问题吗

下面的代码包括
Fragment
class、
ViewHolder
class、
User
class、布局xml和应用程序渐变文件。我正在使用SDK 28,并将我的三星galaxy A6(2017)手机作为设备

public class RequestsFragment extends Fragment {
    private View UsersView;
    private RecyclerView myUsersList;

    //private DatabaseReference UsersRef;
    private DatabaseReference mDatabase;

    private FirebaseAuth mAuth;
    private String currentUserID;
    private FirebaseDatabase database;

    public RequestsFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        FirebaseUser current_user = FirebaseAuth.getInstance().getCurrentUser();
        String uid = current_user.getUid();

        mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(uid).push();

    UsersView = inflater.inflate(R.layout.fragment_requests, container, false);

    myUsersList = UsersView.findViewById(R.id.users_list);
    myUsersList.setLayoutManager(new LinearLayoutManager(getContext()));

    return UsersView;
    }

    @Override
    public void onStart() {
        super.onStart();

        FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<Users>()
                .setQuery(mDatabase, Users.class)
                .build();

        FirebaseRecyclerAdapter<Users, UserViewHolder> adapter = new FirebaseRecyclerAdapter<Users, UserViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull final UserViewHolder holder, int position, @NonNull Users model) {



                mDatabase.addValueEventListener(new ValueEventListener() {
                 @Override
                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                     if (dataSnapshot.hasChild("image"))
                     {
                         String userImage = dataSnapshot.child("image").getValue().toString();
                         String profileName = dataSnapshot.child("name").getValue().toString();
                         String profileStatus = dataSnapshot.child("status").getValue().toString();


                         holder.userName.setText(profileName);
                         holder.userStatus.setText(profileStatus);
                         Picasso.with(getContext()).load(userImage).placeholder(R.drawable.default_avatar).into(holder.profileImage);
                     }
                     else{

                         String profileName = dataSnapshot.child("name").getValue().toString();
                         String profileStatus = dataSnapshot.child("status").getValue().toString();


                         holder.userName.setText(profileName);
                         holder.userStatus.setText(profileStatus);
                     }
                 }

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

                 }
             });

            }

            @NonNull
            @Override
            public UserViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_single_layout, viewGroup,false);
                UserViewHolder viewHolder = new UserViewHolder(view);
                return viewHolder;
            }
        };

        myUsersList.setAdapter(adapter);
        adapter.startListening();
    }



    public static class UserViewHolder extends RecyclerView.ViewHolder
    {

        TextView userName, userStatus;
        CircleImageView profileImage;

        public UserViewHolder(@NonNull View itemView){

            super(itemView);

            userName = itemView.findViewById(R.id.user_single_name);
            userStatus = itemView.findViewById(R.id.user_single_status);
            profileImage = itemView.findViewById(R.id.user_single_image);
        }
    }
}
}

//users\u single\u layout.xml文件
//Gradle应用程序文件
应用插件:“com.android.application”
安卓{
编译DK28版
默认配置{
applicationId“com.xyx”
明斯克版本24
targetSdkVersion 28
版本代码1
版本名称“1.0”
TestInstrumentRunner“android.support.test.runner.AndroidJUnitRunner”
}
建筑类型{
释放{
minifyEnabled false
proguard文件GetDefaultProGuard文件('proguard-android-optimize.txt'),'proguard rules.pro'
}
}
包装选项{
排除“META-INF/许可证”
排除“META-INF/LICENSE-FIREBASE.txt”
排除“META-INF/通知”
}
}
依赖关系{
实现文件树(包括:['*.jar'],目录:“libs”)
实现'com.android.support:appcompat-v7:28.0.0'
实现'com.android.support:design:28.0.0'
实现'com.android.support.constraint:constraint布局:1.1.3'
实现'com.android.support:support-v4:28.0.0'
测试实现'junit:junit:4.12'
androidTestImplementation'com.android.support.test:runner:1.0.2'
androidTestImplementation'com.android.support.test.espresso:espresso核心:3.0.2'
实现'com.google.firebase:firebase核心:16.0.8'
实现'com.google.firebase:firebase存储:16.1.0'
实现'com.google.firebase:firebase auth:16.2.1'
实现'com.firebase:firebase客户端android:2.4.0'
实现'com.google.firebase:firebase数据库:16.1.0'
//画廊图片
实现'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor'com.github.bumptech.glide:compiler:4.9.0'
实现'com.android.support:cardview-v7:28.0.0'
实现'com.android.support:recyclerview-v7:28.0.0'
实现“de.hdodenhof:circleimageview:2.1.0”
实现'com.theartofdev.edmodo:android图像裁剪器:2.4.+'
实现“id.zelory:compressor:2.0.0”
实现'com.squareup.picasso:picasso:2.5.2'
实现'com.squareup.okhttp:okhttp:2.5.0'
//https://github.com/firebase/FirebaseUI-Android
//Firebase实时数据库的FirebaseUI
实现'com.firebaseui:firebaseui数据库:4.3.2'
//用于云Firestore的FirebaseUI
实现'com.firebaseui:firebaseui firestore:4.3.2'
//Firebase身份验证的Firebase用户界面
实现'com.firebaseui:firebaseui auth:4.3.2'
//Firebase身份验证的FirebaseUI(GitHub提供程序)
实现'com.firebaseui:firebaseui auth github:4.3.2'
//用于云存储的FirebaseUI
实现'com.firebaseui:firebaseui存储:4.3.2'
//实现'com.google.firebase:firebase分析:16.4.0'
实现'com.google.android.gms:play services auth:16.0.1'
//实现'com.google.android.gms:play服务库:jar:12.0.1'
//实现'com.google.android.gms:play services:12.0.1'
实现'com.google.firebase:firebase消息:17.6.0'
}
应用插件:“com.google.gms.googleservices”

您的布局是空的,因为您没有在
onCreateView()方法中为片段扩展布局

添加此行:-

UsersView = inflater.inflate(R.layout.fragment_layout,container,false);
如果您的dataSnapshot引用的是模态类对象,请尝试检索您的值,如:-

 Users post = dataSnapshot.getValue(Users.class);

 String profileName = post.getName();  

此答案更详细地介绍了firebase引用或如何在firebase数据库中设置子引用。

您将遇到以下错误:

无法将用户对象转换为字符串值

因为您的
mDatabase
指向一个字符串,而不是指向包含
User
对象的节点:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(uid).push();
还请注意,每次调用
push()
方法时,都会生成一个新的随机键,并且该引用肯定无法传递给
FirebaseRecyclerOptions
对象

要解决这个问题,您需要传递一个查询,该查询可以返回
User
对象和not字符串。您需要传递的查询应该是:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");

因为在
用户
节点下只存在用户对象。

很好,但不幸的是,我的代码中有这些对象,但在提交问题时意外编辑了它们。我已经把它包含在我的代码里了,你能再看一下吗。很多人感谢你的帮助!更新了我的答案,希望这能解决你的问题。嗨,萨加尔!你试过我上面的方法吗?如果你认为我的答案对你有帮助,请考虑通过点击复选来接受它。✔️) 在投票箭头的左边。应该换成绿色。我会很感激的。谢谢!
mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(uid).push();
mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");