나는 서비스를 시작중포 기지 데이터베이스 알림
public class MyService extends Service {
(fields)...
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
if (intent == null) {
System.out.println("ERROR");
return START_REDELIVER_INTENT;
}
eventKeys = (ArrayList<String>) intent.getExtras().get("eventKeys");
//here I attach listeners to firebase database
firebase();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (notifyMessage) {
sendNotification("You have a new message.");
stopSelf();
return;
}
try {
System.out.println("Sleeping...");
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
return START_STICKY;
}
을 그리고 다음은 잠자는 인쇄물을 생산 ... 한 번만 그 후에 오류. null 체크를 제거하면 null 포인터가 생깁니다. firebase 메서드를 제거하면 작동합니다.
private void firebase(List<String> eventKeys) {
System.out.println("Set database listener");
mDataBase = FirebaseDatabase.getInstance().getReference().child("events");
for (String eventKey : eventKeys){
mDataBase.child(eventKey).child("chat").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
//new message received
notifyMessage = true;
sendNotification("You have a new message.");
stopSelf();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
}
이 방법은 효과가 없으며 무엇을해야할지 모릅니다.
오류가 발생했습니다. –
특정 오류가 발생하지 않습니다. 그러나 자녀를 변경하면 알림이 전송되지 않습니다. 나는 앱을 닫을 때이 코드가 실행된다고 언급하지 않았다. – Nikola
청취자를 연결할 때 발생할 수있는 오류를 무시하고 있습니다. 구현 한 'onCancelled' 방금 여기에 쓴 : http://stackoverflow.com/documentation/firebase/5548/how-do-i-listen-for-errors-when-accessing-the-database#t=201609121647524851802 –