Firebase数据赢得';不要在我的回收视图中加载 屏幕启动但不抛出任何错误或bug,我只是启动空白回收器视图,好像它没有读取任何java代码,尽管它们在我的清单中。我尝试将firebase路径向下推到“Book”上,但随后收到一个无法将对象转换为java.lang.string错误

Firebase数据赢得';不要在我的回收视图中加载 屏幕启动但不抛出任何错误或bug,我只是启动空白回收器视图,好像它没有读取任何java代码,尽管它们在我的清单中。我尝试将firebase路径向下推到“Book”上,但随后收到一个无法将对象转换为java.lang.string错误,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,主要活动 public class BarberView extends AppCompatActivity { private ArrayList<Book> books ; private List<String> key; private Context mContext; private static final String TAG = "RealtimeDatabaseDemo"; private

主要活动

public  class BarberView extends AppCompatActivity {
    private ArrayList<Book> books ;
    private List<String> key;
    private Context mContext;
    private static final String TAG = "RealtimeDatabaseDemo";
    private MyViewHolder adapter;
    private TextView list_u, list_p, list_d, list_t, list_c;
    DatabaseReference ref;


    private FirebaseRecyclerOptions<Book> options;


    /**
     * Get the last 50 chat messages.
     */


    RecyclerView recyclerView;

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

        recyclerView =findViewById ( R.id.list_jobs );
        recyclerView.setHasFixedSize ( false );
        recyclerView.setLayoutManager ( new LinearLayoutManager ( this ) );

        ref =  FirebaseDatabase.getInstance ( ).getReference ( );
        Query query = ref.child ( "gregs-281717" );

        final FirebaseRecyclerOptions<Book> options=new FirebaseRecyclerOptions.Builder<Book> ( )
                .setQuery ( query, Book.class )
                .setLifecycleOwner ( this )
                .build ( );

        adapter = new MyViewHolder ( options );
        recyclerView.setAdapter ( adapter );

        query.addValueEventListener ( new ValueEventListener ( ) {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot mdatasnapshot: snapshot.getChildren()) {
                    Book mbook =new Book();
                    mbook.setTime( mdatasnapshot.getValue ( ).toString () );
                    mbook.setDates( mdatasnapshot.getValue ( ).toString () );
                    mbook.setPayDone( mdatasnapshot.getValue ( ).toString () );
                    mbook.setCutDone( mdatasnapshot.getValue ( ).toString () );
                    mbook.setUser_id( mdatasnapshot.getValue ( ).toString () );
                    books.add(mbook);
                }
                adapter = new MyViewHolder (options );
                adapter.notifyDataSetChanged();

                }

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

            }
        });

    }

    @Override
    public void onStart() {
        super.onStart ( );
        adapter.startListening ();
        adapter.notifyDataSetChanged();

    }

    @Override
    protected void onStop() {
        super.onStop ( );
        adapter.startListening ();
        adapter.notifyDataSetChanged();

    }
}
RecyelerView.xml

import com.google.firebase.database.IgnoreExtraProperties;

import org.jetbrains.annotations.NotNull;

@IgnoreExtraProperties

public class Book {
    public String time;
    public String dates;
    public String payDone;
    public String cutDone;
    public String user_id;

    public Book() {
    }

    @NotNull
    @Override
    public String toString() {
        return "Book{" +
                "time='" + time + '\'' +
                ", dates='" + dates + '\'' +
                ", payDone='" + payDone + '\'' +
                ", cutDone='" + cutDone + '\'' +
                ", user_id='" + user_id + '\'' +
                '}';
    }

    public Book(String time, String dates, String cutDone, String payDone, String user_id) {
        this.time = time;
        this.dates = dates;
        this.payDone = payDone;
        this.cutDone = cutDone;
        this.user_id = user_id;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getDates() {
        return dates;
    }

    public void setDates(String dates) {
        this.dates = dates;
    }

    public String getPayDone() {
        return payDone;
    }

    public void setPayDone(String payDone) {
        this.payDone = payDone;
    }

    public String getCutDone() {
        return cutDone;
    }

    public void setCutDone(String cutDone) {
        this.cutDone = cutDone;
    }

    public String getUser_id() {
        return user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".BarberView">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/list_jobs"/>
</androidx.constraintlayout.widget.ConstraintLayout>

在主活动中从firebase加载数据后,应设置适配器

像这样:-


public  class BarberView extends AppCompatActivity {
    private ArrayList<Book> books ;
    private List<String> key;
    private Context mContext;
    private static final String TAG = "RealtimeDatabaseDemo";
    private MyViewHolder adapter;
    private TextView list_u, list_p, list_d, list_t, list_c;
    DatabaseReference ref;






    private FirebaseRecyclerOptions<Book> options;


    /**
     * Get the last 50 chat messages.
     */


    RecyclerView recyclerView;

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

        recyclerView =findViewById ( R.id.list_jobs );
        recyclerView.setHasFixedSize ( false );
        recyclerView.setLayoutManager ( new LinearLayoutManager ( this ) );

        ref =  FirebaseDatabase.getInstance ( ).getReference ( );
        Query query = ref.child ( "gregs-281717" );

        final FirebaseRecyclerOptions<Book> options=new FirebaseRecyclerOptions.Builder<Book> ( )
                .setQuery ( query, Book.class )
                .setLifecycleOwner ( this )
                .build ( );






        query.addValueEventListener ( new ValueEventListener ( ) {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot mdatasnapshot: snapshot.getChildren()) {
                    Book mbook =new Book();
                    mbook.setTime( mdatasnapshot.child ( "Book" ).getValue ( true).toString () );
                    mbook.setDates( mdatasnapshot.getValue (true ).toString () );
                    mbook.setPayDone( mdatasnapshot.getValue ( true).toString () );
                    mbook.setCutDone( mdatasnapshot.getValue (true ).toString () );
                    mbook.setUser_id( mdatasnapshot.getValue ( true).toString () );

                }
                adapter = new MyViewHolder (options );

                recyclerView.setAdapter(adapter);

                adapter.notifyDataSetChanged();


                }

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

            }
        });









    }

    @Override
    public void onStart() {
        super.onStart ( );
        recyclerView.setAdapter(adapter);

    }

    @Override
    protected void onStop() {
        super.onStop ( );
        recyclerView.setAdapter(adapter);

    }


}

公共类BarberView扩展了AppCompatActivity{
私人ArrayList书籍;
私有列表密钥;
私有上下文;
私有静态最终字符串TAG=“RealtimeDatabaseDemo”;
私有MyViewHolder适配器;
私有文本视图列表,列表p,列表d,列表t,列表c;
数据库参考文献;
私人FirebaseRecyclerOptions选项;
/**
*获取最近50条聊天信息。
*/
回收视图回收视图;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.barber_视图);
recyclerView=findViewById(R.id.list\u作业);
recyclerView.setHasFixedSize(false);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
ref=FirebaseDatabase.getInstance().getReference();
查询=ref.child(“gregs-281717”);
最终FirebaseRecyclerOptions选项=新建FirebaseRecyclerOptions.Builder()
.setQuery(查询,Book.class)
.setLifecycleOwner(此)
.build();
query.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
对于(DataSnapshot mdatasnapshot:snapshot.getChildren()){
Book mbook=新书();
setTime(mdatasnapshot.child(“Book”).getValue(true.toString());
setDates(mdatasnapshot.getValue(true.toString());
setPayDone(mdatasnapshot.getValue(true.toString());
setCutDone(mdatasnapshot.getValue(true.toString());
msbook.setUser_id(mdatasnapshot.getValue(true.toString());
}
适配器=新的MyViewHolder(选项);
recyclerView.setAdapter(适配器);
adapter.notifyDataSetChanged();
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
@凌驾
public void onStart(){
super.onStart();
recyclerView.setAdapter(适配器);
}
@凌驾
受保护的void onStop(){
super.onStop();
recyclerView.setAdapter(适配器);
}
}

在通知适配器对象之前,您正在重新初始化它<代码>适配器=新的MyViewHolder(选项)
适配器。notifyDataSetChanged()仅使用
适配器.notifyDataSetChanged()
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:id="@+id/list_books">


    <TextView
        android:textColor="#000000"
        android:id="@+id/list_cut"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/list_price"
        android:layout_width="62dp"
        android:layout_height="19dp"
        android:text="TextView"
        android:textSize="14sp"
        android:textColor="#000000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/list_date"
        app:layout_constraintStart_toEndOf="@+id/list_cut"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/list_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textColor="#000000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/list_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textColor="#000000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/list_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textColor="#000000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/list_time"
        app:layout_constraintStart_toEndOf="@+id/list_date"
        app:layout_constraintTop_toTopOf="parent" />
{
  "Book" : {
    "cutDone" : "cut1",
    "dates" : "11/9/2020",
    "payDone" : "20.00",
    "time" : "03:36AM",
    "user_id" : "notme@badcode.com"
  }
}

public  class BarberView extends AppCompatActivity {
    private ArrayList<Book> books ;
    private List<String> key;
    private Context mContext;
    private static final String TAG = "RealtimeDatabaseDemo";
    private MyViewHolder adapter;
    private TextView list_u, list_p, list_d, list_t, list_c;
    DatabaseReference ref;






    private FirebaseRecyclerOptions<Book> options;


    /**
     * Get the last 50 chat messages.
     */


    RecyclerView recyclerView;

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

        recyclerView =findViewById ( R.id.list_jobs );
        recyclerView.setHasFixedSize ( false );
        recyclerView.setLayoutManager ( new LinearLayoutManager ( this ) );

        ref =  FirebaseDatabase.getInstance ( ).getReference ( );
        Query query = ref.child ( "gregs-281717" );

        final FirebaseRecyclerOptions<Book> options=new FirebaseRecyclerOptions.Builder<Book> ( )
                .setQuery ( query, Book.class )
                .setLifecycleOwner ( this )
                .build ( );






        query.addValueEventListener ( new ValueEventListener ( ) {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot mdatasnapshot: snapshot.getChildren()) {
                    Book mbook =new Book();
                    mbook.setTime( mdatasnapshot.child ( "Book" ).getValue ( true).toString () );
                    mbook.setDates( mdatasnapshot.getValue (true ).toString () );
                    mbook.setPayDone( mdatasnapshot.getValue ( true).toString () );
                    mbook.setCutDone( mdatasnapshot.getValue (true ).toString () );
                    mbook.setUser_id( mdatasnapshot.getValue ( true).toString () );

                }
                adapter = new MyViewHolder (options );

                recyclerView.setAdapter(adapter);

                adapter.notifyDataSetChanged();


                }

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

            }
        });









    }

    @Override
    public void onStart() {
        super.onStart ( );
        recyclerView.setAdapter(adapter);

    }

    @Override
    protected void onStop() {
        super.onStop ( );
        recyclerView.setAdapter(adapter);

    }


}