java - 我的应用程序中的 ListenOrderService(通知)中的错误
问题描述
我正在测试一个交付 android 应用程序,我在通知系统中有一个错误。当它只有一家餐厅时,一切都运行良好,但是当我更改为多家餐厅时,它停止出现通知,无论是客户端下订单时的服务器端,还是服务器更新订单时的客户端。查看我的订单状态服务(服务器端):
public class OrderStatusService extends Service {
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
public OrderStatusService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference("Restaurants").child(Common.restaurantSelected)
.child("Request");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Request request = dataSnapshot.getValue(Request.class);
assert request != null;
if(request.getPhone().equals(Common.currentUser.getPhone()))
showNotification(dataSnapshot.getKey(), request);
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return super.onStartCommand(intent, flags, startId);
}
//Helper method
private void showNotification(String key, Request request) {
Intent intent = new Intent(getBaseContext(), OrderStatusActivity.class);
intent.putExtra("phone", request.getPhone());
PendingIntent pendingIntent = PendingIntent.getActivity
(getBaseContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(getBaseContext());
builder.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setTicker("ParisCart")
.setContentTitle("Pedido Atualizado")
.setContentText("Pedido #" + key + " foi atualizado para " + Common.getStatus(request.getStatus()))
.setContentIntent(pendingIntent)
.setSmallIcon(R.drawable.ic_access_time_black_24dp);
NotificationManager notificationManager = (NotificationManager) getBaseContext().getSystemService(NOTIFICATION_SERVICE);
assert notificationManager != null;
notificationManager.notify(1, builder.build());
}
@Override
public void onDestroy() {
super.onDestroy();
firebaseDatabase = null;
databaseReference = null;
}
}
订单侦听服务的客户也是如此:
public class OrderListenService extends Service {
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
public OrderListenService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference("Restaurants").child(Common.restaurantSelected)
.child("Request");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Request request = dataSnapshot.getValue(Request.class);
assert request != null;
if(request.getStatus().equals("0") && request.getPhone().equals(Common.currentUser.getPhone()))
showNotification(dataSnapshot.getKey(), request);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return super.onStartCommand(intent, flags, startId);
}
//Helper method
private void showNotification(String key, Request request) {
Intent intent = new Intent(getBaseContext(), OrderStatusActivityServer.class);
intent.putExtra("phone", request.getPhone());
PendingIntent pendingIntent = PendingIntent.getActivity
(getBaseContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(getBaseContext());
builder.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setTicker("ParisCart")
.setContentTitle("Pedido Novo")
.setContentText("Pedido #" + key + " adicionado")
.setContentIntent(pendingIntent)
.setSmallIcon(R.drawable.ic_access_time_black_24dp);
NotificationManager notificationManager = (NotificationManager) getBaseContext().getSystemService(NOTIFICATION_SERVICE);
assert notificationManager != null;
notificationManager.notify(2, builder.build());
}
@Override
public void onDestroy() {
super.onDestroy();
firebaseDatabase = null;
databaseReference = null;
}
}
我不知道这是 Firebase 的东西,还是一件小事,比如 currentUser、restaurantSelected 等......