首页 > 解决方案 > 未从活动中的 Firestore 字段中获取正确的值

问题描述

我正在尝试将我的 firestore 数据库中的文档加载到我的活动中,到目前为止,它似乎大部分都在工作,除了一件事之外,我无法从 value 中检索正确的数据。

URI 值

在上图中,我有一个为相机拍摄的图像的 uri 字符串,我用绿色箭头标记了它,红色箭头是没有拍摄图像时设置的默认 uri。

但是,当我在回收站视图中单击我的对象时,带有相机 uri 字符串的航点的信息是默认的,我无法弄清楚这是怎么回事,因为点等的描述在那里,只是没有乌里。

uri 列表输出在日志中。

它在firestore控制台中正确显示,但是当将数据拉入我的活动时,我得到上面显示的日志,

任何帮助将不胜感激!

适配器类-

public class routeRvAdapter extends FirestoreRecyclerAdapter<Route, routeRvAdapter.RouteHolder> {

    private OnItemClickListener listener;


    private static final DiffUtil.ItemCallback<Route> DIFF_CALLBACK = new DiffUtil.ItemCallback<Route>() {
        @Override
        public boolean areItemsTheSame(@NonNull Route oldItem, @NonNull Route newItem) {
            return oldItem.getUid() == newItem.getUid();
        }

        @Override
        public boolean areContentsTheSame(@NonNull Route oldItem, @NonNull Route newItem) {
            return oldItem.getRouteName().equals(newItem.getRouteName()) &&
                    oldItem.getRouteDesc().equals(newItem.getRouteDesc());
        }
    };


    public routeRvAdapter(@NonNull FirestoreRecyclerOptions<Route> options) {
        super(options);
    }

    @NonNull
    @Override
    public RouteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.route_rv_item, parent,false);

        return new RouteHolder(itemView);
    }


    @Override
    protected void onBindViewHolder(@NonNull RouteHolder holder, int position, @NonNull Route model) {
        holder.routeNameTextView.setText(model.getRouteName());
        holder.routeDescTextView.setText(model.getRouteDesc());

    }

    class RouteHolder extends RecyclerView.ViewHolder {

        private TextView routeNameTextView;
        private TextView routeDescTextView;

        public RouteHolder(@NonNull View itemView) {
            super(itemView);
            routeNameTextView = itemView.findViewById(R.id.route_rv_name);
            routeDescTextView = itemView.findViewById(R.id.route_rv_desc);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = getAbsoluteAdapterPosition();
                    if(listener!= null && position != RecyclerView.NO_POSITION) {
                        listener.onItemClicked(getSnapshots().getSnapshot(position),position);
                    }
                }
            });
        }
    }

    public interface OnItemClickListener {
        void onItemClicked(DocumentSnapshot snapshot, int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener;
    }

    public void deleteRoute(int position) {
        getSnapshots().getSnapshot(position).getReference()
                .delete();
    }
}

活动回收器视图 -

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

标签: androidgoogle-cloud-firestoreandroid-recyclerview

解决方案


推荐阅读