Nano Hash - криптовалюты, майнинг, программирование

Несколько уведомлений с разными данными

У меня проблема с моим приложением, которую я не могу решить. Приложение принимает ввод (напоминание) от пользователя, а затем устанавливает его как уведомление. Пользователь может создать столько уведомлений, сколько пожелает. Я хочу, чтобы пользователь щелкнул уведомление и перешел к новому действию (напоминание), чтобы он/она мог видеть напоминание в TextView. Итак, у меня есть действие (SetReminder), которое позволяет пользователю помещать свои данные в текстовый редактор. Затем я сохраняю его данные в hashMap. int — это идентификатор строковых данных пользователя. Затем у меня есть класс (AlarmReceiver), который расширяет BroacastReceiver и генерирует уведомление. В этом классе у меня есть идентификатор для каждого уведомления, который соответствует int hashMap из действия SetReminder. Таким образом, я ожидал, что пользователь увидит данные каждого уведомления. Но этого не происходит. У меня есть несколько уведомлений (я хочу этого), но пользователь видит данные последнего уведомления, независимо от того, какие уведомления выбирает. Я публикую код из трех действий. Заранее спасибо.

SetReminder.класс

    package demo.push_not_demo;


    import android.graphics.PorterDuff;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.Button;
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.os.SystemClock;
    import android.widget.EditText;
    import com.kunzisoft.switchdatetime.SwitchDateTimeDialogFragment;
    import java.util.HashMap;



    public class SetReminder extends AppCompatActivity {

private SwitchDateTimeDialogFragment dateTimeFragment;
Button b1,b2,b3;
EditText editText;
public static int counter=0;
public static HashMap<Integer,String> hashMap;
private static final String TAG_DATETIME_FRAGMENT = "TAG_DATETIME_FRAGMENT";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.set_reminder);
    hashMap= new HashMap<Integer, String>();
    b1=(Button) findViewById(R.id.set_date_time);
    b2=(Button) findViewById(R.id.cancel);
    b3=(Button) findViewById(R.id.save);
    b1.setOnTouchListener(touch);
    b2.setOnTouchListener(touch);
    b3.setOnTouchListener(touch);
    editText=(EditText) findViewById(R.id.reminder_edit);
}

View.OnTouchListener touch= new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (v.getId()){
            case R.id.set_date_time:
                if (event.getAction()==MotionEvent.ACTION_DOWN){
                    v.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
                    v.invalidate();
                }
                else if (event.getAction()== MotionEvent.ACTION_UP){
                    v.getBackground().clearColorFilter();
                    v.invalidate();
                    // Construct SwitchDateTimePicker
                    dateTimeFragment = (SwitchDateTimeDialogFragment) getSupportFragmentManager().findFragmentByTag(TAG_DATETIME_FRAGMENT);
                    if(dateTimeFragment == null) {
                        dateTimeFragment = SwitchDateTimeDialogFragment.newInstance(
                                getString(R.string.label_datetime_dialog),
                                getString(R.string.positive_button_datetime_picker),
                                getString(R.string.negative_button_datetime_picker)
                        );
                    }
                    dateTimeFragment.show(getSupportFragmentManager(), TAG_DATETIME_FRAGMENT);
                }
            break;
            case R.id.cancel:
                if (event.getAction()==MotionEvent.ACTION_DOWN){
                    v.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
                    v.invalidate();
                    cancelalarm();
                }
                else if (event.getAction()== MotionEvent.ACTION_UP){
                    v.getBackground().clearColorFilter();
                    v.invalidate();
                    Intent intent = new Intent(SetReminder.this,HomeScreen.class);
                    startActivity(intent);
                }
            break;
            case R.id.save:
                if (event.getAction()==MotionEvent.ACTION_DOWN){
                    v.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
                    v.invalidate();

                }
                else if (event.getAction()== MotionEvent.ACTION_UP){
                    v.getBackground().clearColorFilter();
                    v.invalidate();
                    counter++;
                    hashMap.put(counter,editText.getText().toString());
                    alarmservice();
                }
            break;
        }
        return false;
    }
};

public void alarmservice(){
    Intent intent = new Intent(this,AlertReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(alarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime()+ 5000,pendingIntent);
}

public void cancelalarm(){
    Intent intent = new Intent(this,AlertReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
}
    }

AlertReceiver.класс

    package demo.push_not_demo;

    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.support.v4.app.NotificationCompat;
    import android.widget.EditText;

    import java.util.HashMap;

    import static android.support.v4.app.NotificationCompat.DEFAULT_SOUND;
    import static android.support.v4.app.NotificationCompat.PRIORITY_HIGH;
    import static android.support.v4.app.NotificationCompat.VISIBILITY_PUBLIC;

    public class AlertReceiver extends BroadcastReceiver {

public static int id=0;

@Override
public void onReceive(Context context, Intent intent) {
    id++;
    createNotification(context);
}

private void createNotification(Context context) {

    NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
        .setAutoCancel(true)
        .setSmallIcon(R.drawable.offer1)
        .setContentTitle("Notification Title")
        .setContentText("Tap to see your reminder")
        .setPriority(PRIORITY_HIGH)
        .setVibrate(new long[] { 50, 1000, 500, 1000, 1000 })
        .setDefaults(DEFAULT_SOUND)
        .setVisibility(VISIBILITY_PUBLIC);

    Intent intent = new Intent(context,Reminder.class);

    PendingIntent pendingintent = PendingIntent.getActivity(context,id,intent,PendingIntent.FLAG_ONE_SHOT);
    notification.setContentIntent(pendingintent);
    NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification ntfc =  notification.build();
    nm.notify(id,ntfc);
}


    }

Напоминание.класс

    package demo.push_not_demo;


   import android.os.Bundle;
   import android.support.annotation.Nullable;
   import android.support.v7.app.AppCompatActivity;
   import android.widget.TextView;

   import static demo.push_not_demo.AlertReceiver.id;
   import static demo.push_not_demo.SetReminder.hashMap;

   public class Reminder extends AppCompatActivity{


TextView txtv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.reminder);
    txtv=(TextView) findViewById(R.id.reminder_textView);
    txtv.setText(hashMap.get(id));

}
    }

Ответы:


1

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

когда вы добавляете уведомление с тем же идентификатором, новое уведомление заменяется последним уведомлением. использовать случайное целое число для идентификатора

17.06.2017
  • как я должен получить доступ к переменной из другого класса, если она не статическая....? Не могли бы вы дать мне информацию о том, как использовать журнал? 17.06.2017
  • и я думаю, что если бы идентификатор всегда был равен 0, я бы ничего не увидел в активности напоминаний. и я говорю вам, что я могу видеть данные... но это всегда последние данные.. Пожалуйста, поправьте меня, если я ошибаюсь... 17.06.2017
  • посмотри, о чем я думал... Я хотел, чтобы идентификатор совпадал с int(counter) hashMap, поэтому я могу получить правильную строку, которая будет отображаться в текстовом представлении, когда пользователь нажимает на уведомление... это неправильно? если id не соответствует int в hashMap, будет ли отображаться правильный текст? спасибо заранее 17.06.2017
  • поместите свой идентификатор в намерение, просто найдите, как передать данные, используя намерение 17.06.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..