我有一个Cardview和RecyclerView,显示来自我的FireStore的数据。 很长一段时间以来,这种方法一直在起作用,但突然之间,它就不再起作用了。 这就是我以前运行应用程序时的样子。 你可以看到它从Firestore中提取数据并在我的android Studios上打印出来。 我检查了一下他们的依赖性,他们看起来很好。
现在当我运行时,它看起来是这样的。 完全空白,什么也不显示。 我把这个留了一夜,不知道发生了什么事。 在android工作室中显示没有错误,它的构建很好。
如有任何建议,不胜感激?
ReceiptActivity.java
public class ReceiptActivity extends AppCompatActivity {
private RecyclerView mFirestoreList;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private ReceiptAdapter adapter;
private CollectionReference receiptRef = db.collection( "users" )
.document( "BtliRhtVFiQntlH2Hp1gvjG59b32" )
.collection( "Receipts" );
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_receipt );
mFirestoreList = findViewById(R.id.firestore_List);
setUpRecyclerView();
}
private void setUpRecyclerView() {
Query query = receiptRef = db.collection( "users" )
.document( "BtliRhtVFiQntlH2Hp1gvjG59b32" )
.collection( "Receipts" );
FirestoreRecyclerOptions<ReceiptsModel> options = new FirestoreRecyclerOptions.Builder<ReceiptsModel>()
.setQuery( query, ReceiptsModel.class )
.build();
//View holder class
adapter = new ReceiptAdapter( options );
mFirestoreList = findViewById( R.id.firestore_List );
mFirestoreList.setHasFixedSize( true );
mFirestoreList.setLayoutManager( new LinearLayoutManager( this ) );
mFirestoreList.setAdapter( adapter );
new ItemTouchHelper( new ItemTouchHelper.SimpleCallback( 0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT ) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
adapter.deleteItem( viewHolder.getAdapterPosition() );
}
} ).attachToRecyclerView( mFirestoreList );
adapter.setOnItemClickListener(new ReceiptAdapter.OnItemClickListener() {
@Override
public void onItemClick(DocumentSnapshot documentSnapshot, int position) {
ReceiptsModel model = documentSnapshot.toObject(ReceiptsModel.class);
Intent intent = new Intent(ReceiptActivity.this,DisplayActivity.class);
intent.putExtra("date",model.getDate());
intent.putExtra("bed",model.getBed());
intent.putExtra("store",model.getStore());
intent.putExtra("total",model.getTotal());
startActivity(intent);
}
} );
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
}
list_view.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_marginTop="8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:cardBackgroundColor="#fece2f">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp">
<TextView
android:id="@+id/view_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="email"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:maxLines="1"
android:ellipsize="end" />
<TextView
android:id="@+id/view_total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="8dp"
android:text="total"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<TextView
android:id="@+id/view_store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="store"
android:layout_alignParentStart="true"
android:layout_below="@+id/view_date"
/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
ReceiptAdapter.java
public class ReceiptAdapter extends FirestoreRecyclerAdapter<ReceiptsModel, ReceiptAdapter.ReceiptHolder> {
private OnItemClickListener listener;
public ReceiptAdapter(@NonNull FirestoreRecyclerOptions<ReceiptsModel> options) {
super( options );
}
@Override
protected void onBindViewHolder(@NonNull ReceiptHolder holder, int i, @NonNull ReceiptsModel model) {
holder.view_date.setText(model.getDate());
holder.view_store.setText(model.getStore());
holder.view_total.setText(String.valueOf(model.getTotal()));
}
@NonNull
@Override
public ReceiptHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_view, parent, false);
return new ReceiptHolder( v );
}
//delete receipt in the card view
public void deleteItem(int position) {
getSnapshots().getSnapshot( position ).getReference().delete();
}
class ReceiptHolder extends RecyclerView.ViewHolder {
TextView view_date;
TextView view_total;
TextView view_store;
public ReceiptHolder(@NonNull View itemView) {
super( itemView );
view_date = itemView.findViewById(R.id.view_date);
view_store = itemView.findViewById(R.id.view_store);
view_total = itemView.findViewById(R.id.view_total);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onItemClick( getSnapshots().getSnapshot( position ), position );
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
好的。我能用了。 我必须在Firestore规则中将权限从'null'更改为'true'。 Null工作了一个月,但最终成了一个问题。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != true;
}
}
}