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);
}
}