java - MpAndroidChart : IndexOutOfBoundsException -


in app im getting wifi list<scanresults> data , trying update chart not going , , app throw exception java.lang.indexoutofboundsexception: invalid index 0, size 0 , have tried many code combination mpandroidchart nothing solve issue ... why happening ?

broadcast receiver wifi scanresults :

public class receiver extends broadcastreceiver {      @suppresswarnings("constantconditions")     @override     public void onreceive(context context, intent intent) {          new thread(new runnable() {             @override             public void run() {                 try {                     list<scanresult> results = mwifimanager.getscanresults();                     arraylist<string> lista_bssid_e_skanuar = new arraylist<>();                     arraylist<string> lista_bssid_lista_skanuar = new arraylist<>();                      //boolean channel_width_supported = false;                      (scanresult result1 : results) {                          final string ssid = result1.ssid;                         final string channel = string.valueof(ieee80211_frequency_to_channel(result1.frequency));                         final string frequency = string.valueof(result1.frequency);                         final string bssid = result1.bssid;                         final string capabilities = result1.capabilities;                         final string signal = string.valueof(result1.level);                         string security = "free";                         int channel_width;                         if (build.version.sdk_int >= build.version_codes.m) {                             //channel_width_supported = true;                             int freq1 = result1.centerfreq0;                             int freq2 = result1.centerfreq1;                             int channel_width_freq;                             if (freq1 - freq2 < 0) {                                 channel_width_freq = freq2 - freq1;                             } else {                                 channel_width_freq = freq1 - freq2;                             }                              if ((integer.parseint(frequency) - channel_width_freq) <= 0) {                                 channel_width = channel_width_freq - integer.parseint(frequency);                             } else {                                 channel_width = integer.parseint(frequency) - channel_width_freq;                             }                              if (channel_width != 20 && channel_width != 40 && channel_width == 60 && channel_width != 80 && channel_width != 160) {                                 channel_width = 21;                             }                         } else {                             //channel_width_supported = false;                             channel_width = 21;                         }                          final int finalchannel_width = channel_width;                         if (capabilities.contains("wpa")) {                             security = "wpa";                         }                         if (capabilities.contains("wpa2")) {                             security = "wpa2";                         }                         if (capabilities.contains("wep")) {                             security = "wep";                         }                         final string finalsecurity = security;                          if (!bssid.equals("00:00:00:00:00:00")) {                             lista_bssid_e_skanuar.add(ssid + "/" + channel + "/" + frequency + "/" + bssid + "/" + capabilities + "/" + signal + "/" + finalsecurity + "/" + finalchannel_width);                             lista_bssid_lista_skanuar.add(bssid);                         }                     }                      synchronized (_lock) {                         (int = 0; < lista_bssid_e_skanuar.size(); a++) {                             string[] te_dhenat = lista_bssid_e_skanuar.get(a).split("/");                             final string ssid_lista = te_dhenat[0];                             final string channel_lista = te_dhenat[1];                             final string bssid_lista = te_dhenat[3];                             final string signal_lista = te_dhenat[5];                             final int kanali = integer.parseint(channel_lista);                              int signal = integer.parseint(signal_lista) + 100;                             if (signal > 70) {                                 signal = 70;                             }                              if (!lista_bssid_lista.contains(bssid_lista)) {                                 lista_bssid_lista.add(bssid_lista);                                 addentry(kanali - 2, 0, a, ssid_lista);                                 addentry(kanali, signal, a, ssid_lista);                                 addentry(kanali + 2, 0, a, ssid_lista);                             } else {                                 (int = 0; < lista_bssid_lista.size(); i++) {                                     if (!lista_bssid_lista_skanuar.contains(lista_bssid_lista.get(i))) {  //maybe exception happening here ??                                         final int finalsignal1 = signal;                                         final int finali = i;                                         removeentry(kanali, finalsignal1, finali);                                         addentry(kanali - 2, 0, finali, ssid_lista);                                         addentry(kanali, 0, finali, ssid_lista);                                         addentry(kanali + 2, 0, finali, ssid_lista);                                     } else {  // or here ????                                         final int finalsignal = signal;                                         final int finala = a;                                         removeentry(kanali, finalsignal, finala);                                          addentry(kanali - 2, 0, finala, ssid_lista);                                         addentry(kanali, finalsignal, finala, ssid_lista);                                         addentry(kanali + 2, 0, finala, ssid_lista);                                     }                                 }                             }                         }                     }                 }catch (exception i){                     thread.currentthread().interrupt();                 }             }         }).start();     } } 

add entry method :

private synchronized void addentry(float kanali, float sinjali, int indexi, string emri) {     linedata data = mwifichart.getdata();     ilinedataset set = data.getdatasetbyindex(indexi);     if (set == null) {         set = createset(emri);         data.adddataset(set);     }     data.addentry(new entry(kanali, sinjali), indexi);     data.notifydatachanged();     mwifichart.notifydatasetchanged();     getactivity().runonuithread(new runnable() {         @override         public void run() {             mwifichart.invalidate();         }     }); } 

remove entry method :

private synchronized void removeentry(float x_value,float y_value, int indexi) {     try {         linedata data = mwifichart.getdata();         if (data != null) {             ilinedataset set = data.getdatasetbyindex(indexi);             if (set != null) {                 data.removeentry(x_value - 2, indexi);                 data.removeentry(x_value + 0, indexi);                 data.removeentry(x_value + 2, indexi);                 data.notifydatachanged();                 mwifichart.notifydatasetchanged();             }         }     }catch (exception i){     tastytoast.maketext(getcontext(),i.getmessage(),tastytoast.length_short,tastytoast.error);     } } 

i'm getting exception , app crash instantly , tried many code combination nothing ...

java.lang.indexoutofboundsexception: invalid index 0, size 0                                                    @ java.util.arraylist.throwindexoutofboundsexception(arraylist.java:260)                                                    @ java.util.arraylist.get(arraylist.java:313)                                                    @ com.github.mikephil.charting.data.dataset.getentryforindex(dataset.java:286)                                                    @ com.github.mikephil.charting.utils.transformer.generatetransformedvaluesline(transformer.java:184)                                                    @ com.github.mikephil.charting.renderer.linechartrenderer.drawvalues(linechartrenderer.java:547)                                                    @ com.github.mikephil.charting.charts.barlinechartbase.ondraw(barlinechartbase.java:263) 

update :

it seems exception not happening if code runs on ui thread , not sure , don't throws exception anymore ???

example

getactivity().runonuithread(new runnable() {                                                 @override                                                 public void run() {                                                     removeentry(kanali, finalsignal, finala);                                                      addentry(kanali - 2, 0, finala, ssid_lista);                                                     addentry(kanali, finalsignal, finala, ssid_lista);                                                     addentry(kanali + 2, 0, finala, ssid_lista);                                                 }                                             }); 

in add entry method mwifichart.getdata() returning null. , trying value list. please put check on statement. if(data !=null && data.size >=indexi) ilinedataset data =data.getsetdatabyindex(indexi)


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -