расширяет функцию BroadcastReceiver onReceive. Невозможно получить статический ArrayList из другого класса. - PullRequest
0 голосов
/ 23 мая 2018

Это получатель

    public class Alarm extends BroadcastReceiver
      {

    @Override
    public void onReceive(Context context, Intent intent)
    {
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");

        wl.acquire();

 NotificationClass.createNotification("Total Item In List is :"+Globals.productList.size(),context);
        wl.release();
    }

    public void setAlarm(Context context) {
        Log.i("ALARM", "Alarm has been set it");
        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, Alarm.class);
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
        am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 1 * 1, pi); 

    }

    public void cancelAlarm(Context context)
    {
        Log.i("ALARM","Alarm has been Cancel");
        Intent intent = new Intent(context, Alarm.class);
        PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(sender);
    }

Вот глобальный класс

public class Globals  {
  public static List <ProductClass> productList=new ArrayList<ProductClass>();
public static String testArray[]={"test1","test2","test3"};
}

Приложение не зависало, но функция onReceive Globals.productList.size возвращает 0, я могу получить данные из testArray,Массив productList также является статическим, и я могу получать данные из Globals.ProductList во всех действиях, кроме функции onReceuve.

Итак, как мне получить и получить данные из глобального статического ArrayList?

Класс MainActivity

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

            GetDataClass.getAllData();
  List <ProductList> pList=new ArrayList<ProductList>();
                pList=GetDataClass.data;
        for(int i=0;i<GetDataClass.data.size();i++)
        {

            ProductList temp=new ProductList();

            temp.set(pList.get(i).pName,pList.get(i).stock,
                    pList.get(i).provider,pList.get(i).jk,pList.get(i).starCounter);

            Globals.productList.add(temp);
        }
        Log.i("Count", String.valueOf(Globals.productList.size()));//Return Correct number.

   Alarm alarm=new Alarm();
    alarm.setAlarm(getApplicationContext());
}

1 Ответ

0 голосов
/ 23 мая 2018

Я считаю, что вам нужно отладить это и посмотреть изменения в вашем productList.

С первого взгляда без остатка кода, я считаю, что при запуске программы вы инициализируете свой список как новыйсписок, который создает пустой список размером 0 (который возвращается вам) , так что для меня это выглядит вполне нормально.

BroadcastReceiver следует называть следующим образом, вы неСоздайте объект этого:

Intent intent = new Intent(getApplicationContext(), Alarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(appContext, alarmRequestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendarTime, pendingIntent);

Проверьте документацию BroadcastReceiver для более подробной информации.

** Обратите внимание, что сохранение данных в статическом списке не означает, что они останутся там послеПрограмма закрыта, и BroadcastReceiver может работать, когда приложение не запущено, поэтому вы сможете получать данные в приложении, а не в этом классе.Возможно, вам нужно будет сохранить данные в базе данных или что-то еще, чтобы их можно было достать, я думаю, что ваша проблема здесь не в том, чтобы получить данные. (Опять же, немного больше кода поможет мне помочь вам лучше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...