在禁用后启用Internet时,应用程序崩溃

时间:2014-10-13 09:06:19

标签: android internet-connection

我从url获取数据并将其存储在arraylist中并在tab中显示该内容(使用操作栏)。问题是,当因特网连接被禁用后启用了因为arraylist的大小为0时,应用程序崩溃了。我实施的代码是 -

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)

1 个答案:

答案 0 :(得分:0)

只需检查您是否在清单中添加了权限。如果不 将INTERNET权限添加到清单文件中。

你必须添加这一行:

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

在AndroidManifest.xml中的应用程序标记之外