我正在使用 firebase 编写 Android 应用程序。我有一个部分,用户发送取件请求,该请求显示在司机的请求片段中。
为了处理接受/拒绝,我已经设置了它,因此当您单击“接受”时,它会创建另一个包含已接受请求的 Firebase 子项,然后我会将其显示为已处理的新请求项。
问题是,当我创建一个新请求并接受它时,如果用户尝试发送另一个请求,它会直接在 firebase 中创建为已接受的请求,并且不会显示为新请求。不知道为什么会发生这种情况,因为接受的请求被设置为仅在原始请求的接受按钮点击侦听器中创建。
调试我在控制台上得到这个:
E/ImeBackDispatcher:未找到 Ime 回调。忽略 unregisterReceivedCallback。回调ID:
不确定它是否有什么关系,但我不明白为什么会出现这个问题。
这里我创建了原始的Request
private void createrequest(){
DatabaseReference userefdata = FirebaseDatabase.getInstance().getReference().child("Requests");
userefdata.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot snap : snapshot.getChildren()) {
String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
String drivid = snap.child("driverid").getValue(String.class);
Boolean acted = snap.child("actedon").getValue(Boolean.class);
if (Objects.equals(drivid, userID)){
Requestitem evt = new Requestitem(snap.child("_name").getValue(String.class),
snap.child("_major").getValue(String.class),
snap.child("time").getValue(String.class),
snap.child("riderid").getValue(String.class),
snap.child("driverid").getValue(String.class),
false
);
if(acted == true)
{
requestitemsaccted.add(evt);
}
else {
requestitems.add(evt);
}
}
}
adapter.notifyDataSetChanged();
adapter2.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
//在这里,我从适配器创建接受的请求并删除原始请求
public viewH(@NonNull View itemView) {
super(itemView);
ace = itemView.findViewById(R.id.bacc);
String rideridd = list2.get(pos).getRiderid();
ace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseDatabase.getInstance().getReference("Requests").child(rideridd).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
snapshot.getRef().removeValue();
String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
RequestAccepted acepted = new RequestAccepted(name.getText().toString(), major.getText().toString(), date.getText().toString(), rideridd, userID, true);
_database.getReferenceFromUrl("https://full-ride-59aee-default-rtdb.firebaseio.com/").child("RequestsAccepted").child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser())
.getUid()).setValue(acepted);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
// create new item request acted on in firebase with this data then make it show in ride history
}
});