0

Firebase Job Dispatcher を使用して、15 分ごとに実行される定期的なタスクを実行し、firebase データベースのデータをチェックして、最新のデータに関する通知を表示しています。
私が直面している問題は、リスナーが に正しく接続されていないことです。onStartJobつまり、内部のログ ステートメントonDataAddedが呼び出されません。
以下にコードをリンクしました。

public class FetchInfoService extends JobService {

InfoObject note;
NotificationCompat.Builder notificationBuilder;
private static final String TAG = "SyncService";

public FetchInfoService() {
}

@Override
public boolean onStartJob(com.firebase.jobdispatcher.JobParameters job) {
    Log.e(TAG, "Executing job id: " + job.getTag());
    DatabaseReference dbReference = FirebaseDatabase.getInstance().getReference().child(CONTENT);
    Log.e(TAG,dbReference.getKey());
    dbReference.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.e(TAG,"OnDataChanged Called");    //----Never Called


            for (DataSnapshot infoDataSnapshot : dataSnapshot.getChildren()) {
                note = infoDataSnapshot.getValue(InfoObject.class);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e(TAG,"Listener Cancelled");
        }
    });

notificationBuilder = new NotificationCompat.Builder(getApplicationContext())
                    .setSmallIcon(R.drawable.ic_delete_black_48dp)
                    .setContentTitle(note.getTitle())
                    .setContentText(note.getDescription());
    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    mNotificationManager.notify(1, notificationBuilder.build());
    return false;
}

@Override
public boolean onStopJob(com.firebase.jobdispatcher.JobParameters job) {
    Log.e(TAG, "Finished job: " + job.getTag());
    return false;
}

}

ありがとう

4

1 に答える 1

0

どうやらリスナーが呼び出されなかった理由は、コードが通知を表示している場所で null ポインター例外をスローし続けたため、リスナーをアタッチしてデータベースの変更をリッスンするポイントに到達しなかったためです。内部に通知を表示するコードを移動すると、onChildAdded修正されました。

于 2017-01-05T21:11:45.730 に答える