java - 使用 FirestoreRecyclerAdapter 的 RecyclerView 未从不同手机/模拟器上的同一用户获取数据
问题描述
我正在构建一个应用程序来创建旅行并显示旅行信息,我有一个活动来显示用户创建的所有旅行,但问题是,我只能在我创建的手机/模拟器上看到旅行信息旅行,即使我在不同的手机/模拟器上使用同一用户登录并使用云 Firestore。
这是我的 TravelActivity 的代码(具有用户旅行的 recyclerView 的代码)
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
public class TravelsActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference travelRef = db.collection("travels");
private TravelAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_travels);
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
bottomNavigationView.setSelectedItemId(R.id.searchNav);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
Toast.makeText(this, "Sim", Toast.LENGTH_SHORT).show();
setUpRecyclerView();
}
private void setUpRecyclerView() {
Query query = travelRef.orderBy("timestamp", Query.Direction.DESCENDING)
.whereEqualTo("userID", FirebaseAuth.getInstance().getCurrentUser().getUid())
.whereGreaterThanOrEqualTo("timestamp", System.currentTimeMillis());
FirestoreRecyclerOptions<Travel> options = new FirestoreRecyclerOptions.Builder<Travel>()
.setQuery(query, Travel.class).build();
//Toast.makeText(this, "Options: "+options.toString().length() , Toast.LENGTH_SHORT).show();
adapter = new TravelAdapter(options);
RecyclerView recyclerView = findViewById(R.id.travels_recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.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());
adapter.notifyDataSetChanged();
}
}).attachToRecyclerView(recyclerView);
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
解决方案
将此作为社区 Wiki 发布,因为它基于 @AlexMamo 的评论。
问题是您没有为此查询创建索引,您可以通过遵循该文档或遵循Alex's Answer找到有关如何创建的说明。
推荐阅读
- python - Convert Sql server raw query through SqlAlchemy Orm in python
- python - 在Python中的数据框中成对的行之间减去
- excel - @符号放在间接前面时有什么作用?
- ruby-on-rails - 从 sidekiq 访问不同 docker 容器中的活动存储对象
- css - 我希望第一张图片上有文字,但第二张没有 - 可滑动
- javascript - TypeScript react - JSX 元素类型“Modal.Header”没有任何构造或调用签名
- python - 如何从神经网络模型输出中解码标准化值?
- powershell - 在 Powershell 5 中更改 PSModulePath
- javascript - 如何在屏幕中间生成不重叠的随机粒子?
- gitlab - 如何通过 API 比较 GitLab 中的两个不同标签?