提问者:小点点

Cardview和RecyclerView不再显示在Android Studios应用程序中


我有一个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;
}


 

共1个答案

匿名用户

好的。我能用了。 我必须在Firestore规则中将权限从'null'更改为'true'。 Null工作了一个月,但最终成了一个问题。

service cloud.firestore {
  match /databases/{database}/documents {
match /{document=**} {
  allow read, write: if request.auth != true;
}
  }
}