Intent.putExtra (ключ, значение) не работает - PullRequest
0 голосов
/ 25 августа 2018

Я получил ValueEventListener

   query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
                final Intent intent = new Intent(BackgroundService.this, NextActivity.class);
                Task<String> t=genrate();//not null

                        t.addOnCompleteListener(new OnCompleteListener<String>() {
                            @Override
                            public void onComplete(@NonNull Task<String> task) {
                                if (task.isSuccessful()) {
                                 intent.putExtra("token",task.getResult());

            }
        } });
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                PendingIntent pendingIntent = PendingIntent.getActivity(BackgroundService.this, 0, intent, 0);
                mBuilder.setContentIntent(pendingIntent).setAutoCancel(true);
                mBuilder.setVisibility(VISIBILITY_SECRET);
                NotificationManagerCompat notificationManager = NotificationManagerCompat.from(BackgroundService.this);
                notificationManager.notify(121, mBuilder.build());

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Клавиша token отсутствует в NextActivity.

getIntent().getExtras().getString("token")

возврат null.

В чем может быть проблема?

Ответы [ 4 ]

0 голосов
/ 25 августа 2018

Ваш task.getResult() возвращает строку? Если да, то попробуйте это во втором упражнении.

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String result = extras.getString("token");                
    System.out.println("yeah"+result);
}
0 голосов
/ 25 августа 2018

addValueEventListener() является асинхронным.Вы получите результат только внутри onDataChange().Переместите код для отображения уведомления в отдельный метод и вызовите его внутри onDataChange().

query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                final Intent intent = new Intent(BackgroundService.this, NextActivity.class);
                Task < String > t = genrate(); //not null

                t.addOnCompleteListener(new OnCompleteListener < String > () {
                    @Override
                    public void onComplete(@NonNull Task < String > task) {
                        if (task.isSuccessful()) {
                            intent.putExtra("token", task.getResult());

                            //Show notification here
                            showNotification(intent);
                        }
                    }
                });

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
});

Отдельный метод для отображения уведомления.

private void showNotification(Intent intent) {
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(BackgroundService.this, 0, intent, 0);
    mBuilder.setContentIntent(pendingIntent).setAutoCancel(true);
    mBuilder.setVisibility(VISIBILITY_SECRET);
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(BackgroundService.this);
    notificationManager.notify(121, mBuilder.build());
}
0 голосов
/ 25 августа 2018

Вы не звоните startActivity(intent);

query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                final Intent intent = new Intent(BackgroundService.this, NextActivity.class);
                Task < String > t = genrate(); //not null

                t.addOnCompleteListener(new OnCompleteListener < String > () {
                    @Override
                    public void onComplete(@NonNull Task < String > task) {
                        if (task.isSuccessful()) {
                            intent.putExtra("token", task.getResult());
                            startActivity(intent);
                        }
                    }
                });
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                PendingIntent pendingIntent = PendingIntent.getActivity(BackgroundService.this, 0, intent, 0);
                mBuilder.setContentIntent(pendingIntent).setAutoCancel(true);
                mBuilder.setVisibility(VISIBILITY_SECRET);
                NotificationManagerCompat notificationManager = NotificationManagerCompat.from(BackgroundService.this);
                notificationManager.notify(121, mBuilder.build());

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
0 голосов
/ 25 августа 2018

Вам нужен этот флаг: PendingIntent.FLAG_UPDATE_CURRENT в вашем PendingIntentИзменить:

PendingIntent pendingIntent = PendingIntent.getActivity(BackgroundService.this, 0, intent, 0);

на:

PendingIntent pendingIntent = PendingIntent.getActivity(BackgroundService.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
...