我从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)
答案 0 :(得分:0)
只需检查您是否在清单中添加了权限。如果不 将INTERNET权限添加到清单文件中。
你必须添加这一行:
<uses-permission android:name="android.permission.INTERNET" />
在AndroidManifest.xml中的应用程序标记之外