Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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 无法使用RecyclerView查看firebase中的单用户数据_Java_Android_Firebase_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

Java 无法使用RecyclerView查看firebase中的单用户数据

Java 无法使用RecyclerView查看firebase中的单用户数据,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,期望的行为: 我试图在登录后显示Firebase中的单个用户“电子邮件”和“用户名”数据。目前,我的应用程序在登录时崩溃,logcat显示此错误: 无法将java.lang.String类型的对象转换为 com.example.start.model 注意:我使用intent.putExtra()从登录页面推送用户名 我的数据库快照: 主类: package com.example.start; import android.content.Intent; impo

期望的行为: 我试图在登录后显示Firebase中的单个用户“电子邮件”和“用户名”数据。目前,我的应用程序在登录时崩溃,logcat显示此错误:

无法将java.lang.String类型的对象转换为 com.example.start.model

注意:我使用intent.putExtra()从登录页面推送用户名

我的数据库快照:

主类:

 package com.example.start;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    
    import com.firebase.ui.database.FirebaseRecyclerAdapter;
    import com.firebase.ui.database.FirebaseRecyclerOptions;
    import com.google.firebase.database.DatabaseReference;
    import com.google.firebase.database.FirebaseDatabase;
    
    public class BeginStart extends AppCompatActivity {
    
        DatabaseReference ref;
        FirebaseDatabase rootNode;
       private RecyclerView recyclerView;
       String Receive_username;
    
        private FirebaseRecyclerOptions<model> options;
        private FirebaseRecyclerAdapter<model, MyViewHolder> adapter;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.testlayout);
    
             Intent intent = getIntent();
    Receive_username = intent.getStringExtra("push_username");

    rootNode = FirebaseDatabase.getInstance();
    ref = rootNode.getReference("Users").child(Receive_username);
    
    
            recyclerView =findViewById(R.id.testrecycle);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
options = new FirebaseRecyclerOptions.Builder<model>().setQuery(ref, model.class).build();
     adapter = new FirebaseRecyclerAdapter<model, MyViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull model model) {
                    Toast.makeText(getApplicationContext(), "On Bind!", Toast.LENGTH_SHORT).show();
                    holder.textViewname.setText(model.getUsername());
                    holder.textViewemail.setText(model.getEmail());
                }
    
                @NonNull
                @Override
                public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                   View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_view_layout,parent,false);
                    return new MyViewHolder(v);
                }
            };
    
            adapter.startListening();
            recyclerView.setAdapter(adapter);
    
        }
    }
package com.example.start;

public class model {

    String username, email;

    public model() {
    }

    public model(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
package com.example.start;

import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

class MyViewHolder extends RecyclerView.ViewHolder {

TextView textViewname, textViewemail;




    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        textViewname = itemView.findViewById(R.id.textviewname);
        textViewemail = itemView.findViewById(R.id.textviewemail);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/testrecycle"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textviewname"
    android:text="title"
    android:textSize="30dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textviewemail"
        android:text="email"
        android:textSize="30dp"/>





</LinearLayout>
查看处理程序类:

 package com.example.start;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    
    import com.firebase.ui.database.FirebaseRecyclerAdapter;
    import com.firebase.ui.database.FirebaseRecyclerOptions;
    import com.google.firebase.database.DatabaseReference;
    import com.google.firebase.database.FirebaseDatabase;
    
    public class BeginStart extends AppCompatActivity {
    
        DatabaseReference ref;
        FirebaseDatabase rootNode;
       private RecyclerView recyclerView;
       String Receive_username;
    
        private FirebaseRecyclerOptions<model> options;
        private FirebaseRecyclerAdapter<model, MyViewHolder> adapter;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.testlayout);
    
             Intent intent = getIntent();
    Receive_username = intent.getStringExtra("push_username");

    rootNode = FirebaseDatabase.getInstance();
    ref = rootNode.getReference("Users").child(Receive_username);
    
    
            recyclerView =findViewById(R.id.testrecycle);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
options = new FirebaseRecyclerOptions.Builder<model>().setQuery(ref, model.class).build();
     adapter = new FirebaseRecyclerAdapter<model, MyViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull model model) {
                    Toast.makeText(getApplicationContext(), "On Bind!", Toast.LENGTH_SHORT).show();
                    holder.textViewname.setText(model.getUsername());
                    holder.textViewemail.setText(model.getEmail());
                }
    
                @NonNull
                @Override
                public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                   View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_view_layout,parent,false);
                    return new MyViewHolder(v);
                }
            };
    
            adapter.startListening();
            recyclerView.setAdapter(adapter);
    
        }
    }
package com.example.start;

public class model {

    String username, email;

    public model() {
    }

    public model(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
package com.example.start;

import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

class MyViewHolder extends RecyclerView.ViewHolder {

TextView textViewname, textViewemail;




    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        textViewname = itemView.findViewById(R.id.textviewname);
        textViewemail = itemView.findViewById(R.id.textviewemail);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/testrecycle"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textviewname"
    android:text="title"
    android:textSize="30dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textviewemail"
        android:text="email"
        android:textSize="30dp"/>





</LinearLayout>
回收视图布局:

 package com.example.start;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    
    import com.firebase.ui.database.FirebaseRecyclerAdapter;
    import com.firebase.ui.database.FirebaseRecyclerOptions;
    import com.google.firebase.database.DatabaseReference;
    import com.google.firebase.database.FirebaseDatabase;
    
    public class BeginStart extends AppCompatActivity {
    
        DatabaseReference ref;
        FirebaseDatabase rootNode;
       private RecyclerView recyclerView;
       String Receive_username;
    
        private FirebaseRecyclerOptions<model> options;
        private FirebaseRecyclerAdapter<model, MyViewHolder> adapter;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.testlayout);
    
             Intent intent = getIntent();
    Receive_username = intent.getStringExtra("push_username");

    rootNode = FirebaseDatabase.getInstance();
    ref = rootNode.getReference("Users").child(Receive_username);
    
    
            recyclerView =findViewById(R.id.testrecycle);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
options = new FirebaseRecyclerOptions.Builder<model>().setQuery(ref, model.class).build();
     adapter = new FirebaseRecyclerAdapter<model, MyViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull model model) {
                    Toast.makeText(getApplicationContext(), "On Bind!", Toast.LENGTH_SHORT).show();
                    holder.textViewname.setText(model.getUsername());
                    holder.textViewemail.setText(model.getEmail());
                }
    
                @NonNull
                @Override
                public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                   View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_view_layout,parent,false);
                    return new MyViewHolder(v);
                }
            };
    
            adapter.startListening();
            recyclerView.setAdapter(adapter);
    
        }
    }
package com.example.start;

public class model {

    String username, email;

    public model() {
    }

    public model(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
package com.example.start;

import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

class MyViewHolder extends RecyclerView.ViewHolder {

TextView textViewname, textViewemail;




    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        textViewname = itemView.findViewById(R.id.textviewname);
        textViewemail = itemView.findViewById(R.id.textviewemail);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/testrecycle"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textviewname"
    android:text="title"
    android:textSize="30dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textviewemail"
        android:text="email"
        android:textSize="30dp"/>





</LinearLayout>

回收站视图的单视图布局:

 package com.example.start;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    
    import com.firebase.ui.database.FirebaseRecyclerAdapter;
    import com.firebase.ui.database.FirebaseRecyclerOptions;
    import com.google.firebase.database.DatabaseReference;
    import com.google.firebase.database.FirebaseDatabase;
    
    public class BeginStart extends AppCompatActivity {
    
        DatabaseReference ref;
        FirebaseDatabase rootNode;
       private RecyclerView recyclerView;
       String Receive_username;
    
        private FirebaseRecyclerOptions<model> options;
        private FirebaseRecyclerAdapter<model, MyViewHolder> adapter;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.testlayout);
    
             Intent intent = getIntent();
    Receive_username = intent.getStringExtra("push_username");

    rootNode = FirebaseDatabase.getInstance();
    ref = rootNode.getReference("Users").child(Receive_username);
    
    
            recyclerView =findViewById(R.id.testrecycle);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
options = new FirebaseRecyclerOptions.Builder<model>().setQuery(ref, model.class).build();
     adapter = new FirebaseRecyclerAdapter<model, MyViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull model model) {
                    Toast.makeText(getApplicationContext(), "On Bind!", Toast.LENGTH_SHORT).show();
                    holder.textViewname.setText(model.getUsername());
                    holder.textViewemail.setText(model.getEmail());
                }
    
                @NonNull
                @Override
                public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                   View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_view_layout,parent,false);
                    return new MyViewHolder(v);
                }
            };
    
            adapter.startListening();
            recyclerView.setAdapter(adapter);
    
        }
    }
package com.example.start;

public class model {

    String username, email;

    public model() {
    }

    public model(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
package com.example.start;

import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

class MyViewHolder extends RecyclerView.ViewHolder {

TextView textViewname, textViewemail;




    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        textViewname = itemView.findViewById(R.id.textviewname);
        textViewemail = itemView.findViewById(R.id.textviewemail);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/testrecycle"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textviewname"
    android:text="title"
    android:textSize="30dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textviewemail"
        android:text="email"
        android:textSize="30dp"/>





</LinearLayout>

当您通过以下参考时:

ref = rootNode.getReference("Users").child(Receive_username);
以及:

对于
setQuery()
方法,这意味着您试图将
Receive\u username
节点下存在的所有对象读取为
model
类对象,这实际上是不可能的,因为在该节点下,只有字符串值,因此会出现错误

我试图在登录后显示firebase中的单个用户“电子邮件”和“用户名”数据

如果您只需要阅读单个用户的“电子邮件”和“用户名”,则根本不需要使用Firebase UI库。例如,当您需要在RecyclerView中显示
users
节点中的所有用户时,将使用此库

如果只需要显示与单个用户对应的属性值,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("Users").child(Receive_username);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String email = dataSnapshot.child("email").getValue(String.class);
        String username = dataSnapshot.child("username").getValue(String.class);
        Log.d("TAG", email + "/" + username);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
userRef.addListenerForSingleValueEvent(valueEventListener);
如果您的
Receive\u username
变量包含
Jim
的值,则logcat中的结果将是:

jim@test.com/Jim

谢谢,这帮助我更好地理解了使用数据库的工作,并进一步改进了我的项目。