android - 未从活动中的 Firestore 字段中获取正确的值
问题描述
我正在尝试将我的 firestore 数据库中的文档加载到我的活动中,到目前为止,它似乎大部分都在工作,除了一件事之外,我无法从 value 中检索正确的数据。
在上图中,我有一个为相机拍摄的图像的 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();
}
}
解决方案
推荐阅读
- xml - 在 HTML 属性中使用 XSL 参数值
- java - Manifoldcf documentum 爬行缓慢
- ffmpeg - FLV 到 MP4 的转换保持 PTS 一致
- android - Firebase 电话身份验证异常:SMS 代码仅在 Android 中已过期
- php - php ini设置upload_max_filesize不起作用
- java - 对前缀增量的误解
- javascript - :在三角形无法实现悬停后
- javascript - Vue: :key="$route.fullPath" 性能问题
- c++ - 包含 char 数组的结构体
- sql - 如何仅在 MS Access 2010 查询中显示所有员工缺勤日期?