您如何使用 Firebase Firestore 将 RecyclerView 对象分配给用户最喜欢的对象?

Posted

技术标签:

【中文标题】您如何使用 Firebase Firestore 将 RecyclerView 对象分配给用户最喜欢的对象?【英文标题】:How would you assign a RecyclerView object to a user favourite with Firebase Firestore? 【发布时间】:2021-11-06 23:18:03 【问题描述】:

我对 android 开发和整个 Firestore 还很陌生,我在项目中遇到了一个我找不到太多解决方案的障碍,所以我想知道是否可以寻求一些指导。

我正在制作一个 android 应用程序,用户可以在其中跟随或创建自己的远足,到目前为止,我将远足路线本身存储在填充 recyclerView 的 firestore 中,使用 firebase Auth 注册和登录的用户系统等,这些都在各自的收藏中,如下图,

(我无法发布图片,所以我只能发送链接) Users collection Routes collection

如果可能的话,我想要实现的目标是让用户拥有“最喜欢的路线”列表 理想情况下,您可以在回收站视图上按下一个按钮,将路线保存到他们的帐户中作为最爱,我是只是不确定如何处理这种实现。

回收站视图

public class RouteListerActivity extends AppCompatActivity 



    public RouteViewModel routeViewModel;
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private CollectionReference routeRef = db.collection("Routes");
    private routeRvAdapter adapter;


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

    private void InitRecyclerView() 

        Query query = routeRef.orderBy("routeName", Query.Direction.DESCENDING);

        FirestoreRecyclerOptions<Route> options = new FirestoreRecyclerOptions.Builder<Route>()
                .setQuery(query, Route.class)
                .build();

        adapter = new routeRvAdapter(options);

        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);

        adapter.setOnItemClickListener(new routeRvAdapter.OnItemClickListener() 
            @Override
            public void onItemClicked(DocumentSnapshot snapshot, int position) 

                Route route = snapshot.toObject(Route.class);
                List<Point> listP = route.getRoutePoints();
                Intent intent = new Intent(RouteListerActivity.this, RouteActivity.class);
                Bundle bundle = new Bundle();
                bundle.putSerializable("Route", route);

                intent.putExtras(bundle);
                startActivity(intent);
            
        );

        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.deleteRoute(viewHolder.getAbsoluteAdapterPosition());
                Toast.makeText(RouteListerActivity.this, "Route Has Been Deleted.", Toast.LENGTH_SHORT).show();
            
        ).attachToRecyclerView(recyclerView);

    

    @Override
    protected void onStart() 
        super.onStart();
        adapter.startListening();
    

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

最诚挚的问候!

【问题讨论】:

这段代码中到底有什么不符合您的预期?告诉我们共享代码有什么问题。你有什么错误吗? 【参考方案1】:

您可以在users模型/数据类/Pojo类中添加一个Favourite_Routes Array类型变量成员。

为了在 Favourite_Routes 数组中添加项目,创建另一个模型/数据类/Pojo 类。这是保存最喜欢的路线的数据。或者您可以简单地将 Route ID 存储在 Favourite_Routes 中。

使用保存的路线 ID,您可以根据需要为回收站视图实施 查询

【讨论】:

以上是关于您如何使用 Firebase Firestore 将 RecyclerView 对象分配给用户最喜欢的对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 上将具有自定义 ID 的文档添加到 Firebase (Firestore)

Firebase Firestore 子集合

使用Firestore需要firebase-firestore.js文件吗?

您如何获取与 Firestore 中的 authUser 相关的用户数据库详细信息?

Cloud Firestore 安全规则只允许从 Firebase 函数写入

Firebase Firestore更新时间字段安全问题