Получение данных из щелчка уведомления в android

Привет, ребята, мне нужна помощь в том, как получить данные из моего ожидающего намерения, которое устанавливается с помощью широковещательного приемника. То, что я хочу сделать, - это получить данные идентификатора при нажатии на уведомление, которое будет необходимо для моей активности.

вот как я делаю дополнительные функции

public class AlertReceiver extends BroadcastReceiver {

    private int id;
    // Called when a broadcast is made targeting this class
    @Override
    public void onReceive(Context context, Intent intent) {

        Bundle bundle = intent.getExtras();
        String title = bundle.getString("title");
        String time = bundle.getString("time");
        id = bundle.getInt("id");

        createNotification(context, title, time, "Pharoah Reminder");
    }

    public void createNotification(Context context, String msg, String msgText,  String msgAlert){
        Intent reminderActivity =  new Intent(context, ReminderPreviewActivity.class);
        reminderActivity.putExtra("id", id);

        PendingIntent notificationIntent = PendingIntent.getActivity(context, id,
                reminderActivity, PendingIntent.FLAG_UPDATE_CURRENT );

        NotificationCompat.Builder mBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(context)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(msg)
                .setTicker(msgAlert)
                .setContentText(msgText)
                .setContentIntent(notificationIntent);

        mBuilder.setContentIntent(notificationIntent);
        mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND);
        mBuilder.setAutoCancel(true);

        NotificationManager mNotificationManager =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        mNotificationManager.notify(id, mBuilder.build());
    }
}

но тогда он всегда равен нулю, когда я пытаюсь открыть свою активность из уведомления.

вот как я это понимаю.

public class ReminderPreviewActivity extends AppCompatActivity {

    private Toolbar mToolBar;

    private TextView titleTextView;
    private TextView descTextView;
    private TextView timeTextView;
    private TextView dateTextView;

    private String title;
    private String desc;
    private String date;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reminder_preview);

        mToolBar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(mToolBar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);



        titleTextView   = (TextView) findViewById(R.id.titleTextView);
        descTextView    = (TextView) findViewById(R.id.descTextView);
        timeTextView    = (TextView) findViewById(R.id.timeTextView);
        dateTextView    = (TextView) findViewById(R.id.dateTextView);

        Intent extras = getIntent();

        if(extras.getStringExtra("title") != null){
            setContentFromExtras(extras);
        }else{
            setContentFromDB(extras);
        }
    }

    private void setContentFromExtras(Intent extras){
        title   = extras.getStringExtra("title");
        desc    = extras.getStringExtra("desc");
        date    = extras.getStringExtra("date");

        String[] dateDB = date.split(" ");

        titleTextView.setText(title);
        descTextView.setText(desc);
        timeTextView.setText(formatTime(dateDB[1])+" "+dateDB[2]);
        dateTextView.setText(formatDate(dateDB[0]));
    }

    public void setContentFromDB(Intent extras){
        String id = extras.getStringExtra("id");

        int reminderID = Integer.parseInt(id);

        titleTextView.setText(reminderID);
    }

Мне нужен идентификатор для извлечения данных из базы данных. То же самое происходит, когда я закрываю приложение.

Ответ 1

В AlertReceiver вы объявили

private int id;

и вы используете это значение int в

reminderActivity.putExtra("id", id);

Таким образом, вы также должны использовать его как int в своем методе setContentFromDB():

int reminderID = extras.getIntExtra("id", someInt);
titleTextView.setText("" + reminderID);

где 'someInt' должно быть значением int, которое обычно никогда не используется или значением по умолчанию, если это имеет смысл в вашем случае.

Вы получили null от getStringExtra("id"), потому что было найдено возвращаемое значение, если no String с ключом "id".

И если вы используете значение int с TextView.setText(), оно будет интерпретироваться как строковый ресурс. Я думаю, что в вашем случае ( "id" предназначен для базы данных), что плохо.