2014-10-13 3 views
-3

Я извлекаю данные из url и сохраняю их в arraylist и отображаю этот контент на вкладке (с помощью панели действий). Проблема заключается в сбое приложения, когда подключение к Интернету активируется после того, как оно получает отключена, так как размер ArrayList его получение 0. код, который я реализовалсбой приложения при включении интернета после его отключения

IS-
class stopOffer extends AsyncTask<String,String,ArrayList<HashMap<String,String>>> 
     { 
      int flag=1; 

      @Override 
      protected void onPreExecute() 
      { 
       super.onPreExecute(); 
      } 


      @Override 
      protected ArrayList<HashMap<String,String>> doInBackground(String... urls) 
      { 
       stopOffer=new ArrayList<HashMap<String,String>>(); 
       String url = urls[0]; 
       try 
       { 
        for (int k= 0; k<info.length; k++) 
        { 
         if (info[k].getState() == NetworkInfo.State.CONNECTED) 
          { 
          InputStream in = new java.net.URL(url).openStream(); 

          BufferedReader reader = null; 
          reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); 

          StringBuilder sb = new StringBuilder(); 
          String append = sb.append(reader.readLine() + "\n").toString(); 

          getDataBeforeHash = append.split("#"); 
          len = getDataBeforeHash.length; 
          getDataBeforeComma=new String[len][]; 

          for (int i = 0; i < len; i++) 
          { 
           getDataBeforeComma[i] = getDataBeforeHash[i].split(","); 
           lenBeforeComma=getDataBeforeComma[i].length; 

           HashMap<String,String> stopOfferMap=new HashMap<String,String>(); 

           for(int j=0;j<getDataBeforeComma[i].length;j++) 
           { 
            if(j==0) 
            { 
             stopOfferMap.put("id",getDataBeforeComma[i][j]); 
            } 
            else if(j==1) 
            { 
             stopOfferMap.put("name",getDataBeforeComma[i][j]); 
            } 
            else if(j==2) 
            { 
             stopOfferMap.put("count",getDataBeforeComma[i][j]); 
            } 
            else if(j==3) 
            { 
             stopOfferMap.put("amount",getDataBeforeComma[i][j]); 
            } 
           } 
           stopOffer.add(stopOfferMap); 
          } 
         } 
        } 
       } 
       catch (IOException e) 
       { 
        flag=0; 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 

       } 
       return stopOffer; 

       } 

       @Override 
       protected void onPostExecute(ArrayList<HashMap<String,String>> stopOffer) 
       { 
        if(flag==0) 
        { 
         getActivity().runOnUiThread(new Runnable() { 
          public void run() { 
           Toast.makeText(getActivity(), 
             "Unable to connect to server", 
             Toast.LENGTH_SHORT).show(); 
          } 
         }); 

        } 
        else 
        { 

          tr=new TableRow[len]; 
          id=new String[len]; 
          name=new String[len]; 
          Log.e("size stop",""+stopOffer.size()); 
          for (int i = 0; i < len; i++) 
          { 
           id[i] = stopOffer.get(i).get("id"); 
           name[i] = stopOffer.get(i).get("name"); 
           cnt = stopOffer.get(i).get("count"); 
           amt = stopOffer.get(i).get("amount"); 

           idOffer=stopOffer.get(i).get("id"); 
           nameOffer=stopOffer.get(i).get("name"); 
           tr[i] = new TableRow(getActivity()); 
           tr[i].setId(i); 

           if (i % 2 == 0) 
            tr[i].setBackgroundColor(Color.WHITE); 
           else 
            tr[i].setBackgroundColor(Color.parseColor("#b6d6eb")); 

           tr[i].setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); 

           TextView OfferId1 = new TextView(getActivity()); 
           OfferId1.setText(id[i]); 
           OfferId1.setTextColor(Color.BLACK); 
           OfferId1.setPadding(5, 5, 5, 5); 
           tr[i].addView(OfferId1);// add the column to the table row here 

           TextView OfferName = new TextView(getActivity()); 
           OfferName.setText(name[i]); // set the text for the header 
           OfferName.setTextColor(Color.BLACK); // set the color 
           OfferName.setPadding(5, 5, 5, 5); // set the padding (if 
                 // required) 
           tr[i].addView(OfferName); // add the column to the table row 

           TextView totCountRunning = new TextView(getActivity()); 
           totCountRunning.setText(cnt); // set the text for the header 
           totCountRunning.setTextColor(Color.BLACK); // set the color 
           totCountRunning.setPadding(5, 5, 5, 5); // set the padding 
                  // (if 
                  // required) 
           tr[i].addView(totCountRunning); // add the column to the table 
                // row here 

           TextView totAmtRunning = new TextView(getActivity()); 
           totAmtRunning.setText(amt); // set the text for the header 
           totAmtRunning.setTextColor(Color.BLACK); // set the color 
           totAmtRunning.setPadding(5, 5, 5, 5); // set the padding (if 
                  // required) 
           tr[i].addView(totAmtRunning); // add the column to the table 
               // row here 

           tl.addView(tr[i], new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); 
           db.insertStopDetails(idOffer, nameOffer, cnt, amt); 
           tr[i].setOnLongClickListener(new OnLongClickListener() 
           { 
            @Override 
            public boolean onLongClick(View v) 
            { 
              // TODO Auto-generated method stub 
             idTr=v.getId(); 
             dialog=new Dialog(getActivity()); 
             dialog.setContentView(R.layout.enable_disable_offer); 
             CheckBox cb=(CheckBox)dialog.findViewById(R.id.checkBoxEnableDisable); 
             final Button ok=(Button)dialog.findViewById(R.id.buttonOK); 
             final Button cancel=(Button)dialog.findViewById(R.id.buttonCancel); 
             cb.setText("Enable Offer:"+" "+name[idTr]); 
             dialog.setTitle("Enable Offer"); 

             if(cb.isChecked()) 
             { 
              ok.setOnClickListener(new OnClickListener() 
              { 
               @Override 
               public void onClick(View v) 
               { 
                setConnection(); 
                // add your data 
                nameValuePairs = new ArrayList<NameValuePair>(3); 
                nameValuePairs.add(new BasicNameValuePair("flag", "1")); 
                nameValuePairs.add(new BasicNameValuePair("offerName",id[idTr])); 
                nameValuePairs.add(new BasicNameValuePair("OfferStatus","1")); 
                enableOffer(); 
                dialog.cancel(); 
               } 
              }); 
              cancel.setOnClickListener(new OnClickListener() 
              { 
               @Override 
               public void onClick(View v) 
               { 
                dialog.cancel(); 
               } 
              }); 
             } 
             else 
             { 
              ok.setOnClickListener(new OnClickListener() 
              { 
               @Override 
               public void onClick(View v) 
               { 
                dialog.cancel(); 
               } 
              }); 
              cancel.setOnClickListener(new OnClickListener() 
              { 
               @Override 
               public void onClick(View v) 
               { 
                dialog.cancel(); 
               } 
              }); 
             } 
             dialog.show(); 
             return true; 
            } 
           }); 
          } 

        } 
       } 
       } 

Я называю этот класс от onCreateView, если интернет доступен.

Logcat-

10-13 13:44:37.059: E/AndroidRuntime(4677): FATAL EXCEPTION: main 
10-13 13:44:37.059: E/AndroidRuntime(4677): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at java.util.ArrayList.get(ArrayList.java:304) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at info.rh.dashboard.RunningOfferFragment$dataRunningStopOffer.onPostExecute(RunningOfferFragment.java:635) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at info.rh.dashboard.RunningOfferFragment$dataRunningStopOffer.onPostExecute(RunningOfferFragment.java:1) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at android.os.AsyncTask.finish(AsyncTask.java:631) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at android.os.Looper.loop(Looper.java:176) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at android.app.ActivityThread.main(ActivityThread.java:5319) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
10-13 13:44:37.059: E/AndroidRuntime(4677):  at dalvik.system.NativeStart.main(Native Method) 
+0

Что ошибка аварии? исключение нулевого указателя? – Elltz

+0

Сообщение logcat и для проверки безопасности на нуль или размер перед выполнением какой-либо операции в ArrayList. –

+0

@ Исключительное исключение Elltz-indexoutofbound – Anushka

ответ

0

Просто проверьте вы добавили разрешение в манифесте. Если нет Добавьте разрешение INTERNET в файл манифеста.

Вы должны добавить следующую строку:

<uses-permission android:name="android.permission.INTERNET" /> 

вне тега приложения в вашем AndroidManifest.xml

+0

@ khurram- Я уже добавил его. Он легко извлекает данные, если нет перерыва в подключении к Интернету – Anushka

+0

для (int i = 0; i khurram