Android Indexoutofbounds异常无效索引0,大小为0
我是android开发的新手。我在有效的索引0中得到这个错误indexoutofbounds异常,大小为0 03-21 02:19:44.530:E/AndroidRuntime2693:致命异常:主 03-21 02:19:44.530:E/AndroidRuntime2693:java.lang.IndexOutOfBoundsException:索引0无效,大小为0 03-21 02:19:44.530:E/AndroidRuntime2693:at java.util.ArrayList.ThrowindexOutfBoundsExceptionArrayList.java:255 03-21 02:19:44.530:E/AndroidRuntime2693:at java.util.ArrayList.getArrayList.java:308 03-21 02:19:44.530:E/AndroidRuntime2693:at com.example.listcheck.ListActivity.GetSearchResults2ListActivity.java:284 03-21 02:19:44.530:E/AndroidRuntime2693:at com.example.listcheck.ListActivity.access$0ListActivity.java:267 03-21 02:19:44.530:E/AndroidRuntime2693:at com.example.listcheck.ListActivity$LoadData.onPostExecuteListActivity.java:260 03-21 02:19:44.530:E/AndroidRuntime2693:at com.example.listcheck.ListActivity$LoadData.onPostExecuteListActivity.java:1 03-21 02:19:44.530:E/AndroidRuntime2693:at-android.os.AsyncTask.finishAsyncTask.java:631 03-21 02:19:44.530:E/AndroidRuntime2693:at android.os.AsyncTask.access$600AsyncTask.java:177 03-21 02:19:44.530:E/AndroidRuntime2693:at android.os.AsyncTask$InternalHandler.handleMessageAsyncTask.java:644 03-21 02:19:44.530:E/AndroidRuntime2693:at android.os.Handler.dispatchMessageHandler.java:99 03-21 02:19:44.530:E/AndroidRuntime2693:at-android.os.Looper.loopLooper.java:137 03-21 02:19:44.530:E/AndroidRuntime2693:at-android.app.ActivityThread.mainActivityThread.java:5103 03-21 02:19:44.530:E/AndroidRuntime2693:at java.lang.reflect.Method.invokenactive方法 03-21 02:19:44.530:E/AndroidRuntime2693:at java.lang.reflect.Method.invokeMethod.java:525 03-21 02:19:44.530:E/AndroidRuntime2693:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:737 03-21 02:19:44.530:E/AndroidRuntime2693:com.android.internal.os.ZygoteInit.mainZygoteInit.java:553 03-21 02:19:44.530:E/AndroidRuntime2693:at dalvik.system.NativeStart.main本地方法 这是我的密码:Android Indexoutofbounds异常无效索引0,大小为0,android,arrays,android-listview,arraylist,geojson,Android,Arrays,Android Listview,Arraylist,Geojson,我是android开发的新手。我在有效的索引0中得到这个错误indexoutofbounds异常,大小为0 03-21 02:19:44.530:E/AndroidRuntime2693:致命异常:主 03-21 02:19:44.530:E/AndroidRuntime2693:java.lang.IndexOutOfBoundsException:索引0无效,大小为0 03-21 02:19:44.530:E/AndroidRuntime2693:at java.util.ArrayList
public class ListActivity extends Activity {
ListView listService;
String url = "http://textbookmarket.in/demo/tick-tack-toe-spa/webservices/index.php?method=getAllServices";
ArrayAdapter<String> adapterService;
ProgressDialog progressDialog;
ListView serviceListData;
ArrayList<String> arrayServiceTitle, arrayServiceDes,
arrayServicesthirtynormal, arrayservicesthirtymember,
arrayServicessixtynormal, arrayservicessixtytymember,
arrayservicesningtytynormal, arrayservicesningtytymember;
ArrayList<Integer> arrayServiceId;
ImageView btnBackToMediaMainActivity;
LinearLayout btnContactUs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
createObjs();
listService = (ListView) findViewById(R.id.mlistview);
// btnBackToMediaMainActivity = (ImageView)
// findViewById(R.id.btnBackToMediaMainActivity);
ConnectionDetector cd = new ConnectionDetector(getApplicationContext());
Boolean isInternetPresent = cd.isConnectingToInternet();
if (isInternetPresent) {
new LoadData().execute();
} else {
}
}
public class ConnectionDetector {
Context _context;
public ConnectionDetector(Context context) {
this._context = context;
}
public boolean isConnectingToInternet() {
ConnectivityManager connectivity = (ConnectivityManager) getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}
}
private void createObjs() {
arrayServiceId = new ArrayList<Integer>();
arrayServiceTitle = new ArrayList<String>();
// arrayServiceImage = new ArrayList<String>();
arrayServiceDes = new ArrayList<String>();
arrayServicesthirtynormal = new ArrayList<String>();
arrayservicesthirtymember = new ArrayList<String>();
arrayServicessixtynormal = new ArrayList<String>();
arrayservicessixtytymember = new ArrayList<String>();
arrayservicesningtytynormal = new ArrayList<String>();
arrayservicesningtytymember = new ArrayList<String>();
}
public class LoadData extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(ListActivity.this, "",
"Please wait", true);
progressDialog.setCancelable(true);
}
@Override
protected String doInBackground(String... params) {
// Fetch Top Articles
String mResponse = fetchJsonUrl(url);
Log.v("log", " resultsEventsAll --> " + mResponse);
try {
JSONObject jsonObject = new JSONObject(mResponse);
String status = jsonObject.optString("status");
if(status != null && status.equals("1")) {
JSONObject jsonResultObj = jsonObject.optJSONObject("result");
if(jsonResultObj != null) {
JSONArray jsonServicesArray = jsonResultObj.optJSONArray("services");
if(jsonServicesArray != null && jsonServicesArray.length() > 0) {
//resultServiceArrayList = new ArrayList<ResultService>(jsonServicesArray.length());
for(int i = 0; i < jsonServicesArray.length(); i++) {
JSONObject jsonObject2 = jsonServicesArray.optJSONObject(i);
if(jsonObject2 != null) {
ListModel resultService = new ListModel ();
resultService.setServicesId(jsonObject2.getInt("service_id"));
resultService.setServicesTitle(jsonObject2.optString("name"));
resultService.setServicesDes(jsonObject2.optString("description"));
JSONObject json30 = jsonObject2.optJSONObject("30_mins");
if(json30 != null) {
ListModel resultServiceThirty = new ListModel();
resultServiceThirty.setServicesThirtynormal(json30.optString("normal"));
resultServiceThirty.setServicesThirtymember(json30.optString("member"));
// resultService.setResultServiceThirty(resultServiceThirty);
}
JSONObject json60 = jsonObject2.optJSONObject("60_mins");
if(json30 != null) {
ListModel resultServiceSixtyty = new ListModel();
resultServiceSixtyty.setServicesThirtynormal(json60.optString("normal"));
resultServiceSixtyty.setServicesThirtymember(json60.optString("member"));
// resultService.setResultServiceThirty(resultServiceThirty);
}
JSONObject json90 = jsonObject2.optJSONObject("90_mins");
if(json30 != null) {
ListModel resultServiceNinty = new ListModel();
resultServiceNinty.setServicesThirtynormal(json90.optString("normal"));
resultServiceNinty.setServicesThirtymember(json90.optString("member"));
// resultService.setResultServiceThirty(resultServiceThirty);
}
}
arrayServiceId.add(jsonObject2.getInt("service_id"));
arrayServiceTitle.add(jsonObject2.getString("name"));
arrayServiceDes.add(jsonObject2.getString("description"));
arrayServicesthirtynormal.add(jsonObject2.getString("normal"));
arrayservicesthirtymember.add(jsonObject2.getString("member"));
arrayServicessixtynormal.add(jsonObject2.getString("normal"));
arrayservicessixtytymember.add(jsonObject2.getString("member"));
arrayservicesningtytynormal.add(jsonObject2.getString("normal"));
arrayservicesningtytymember.add(jsonObject2.getString("member"));
}
}
}
}
} catch (Exception e) {
}
return mResponse;
}
public String getMonth(int month) {
return new DateFormatSymbols().getMonths()[month - 1];
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
progressDialog.dismiss();
ArrayList<ListModel> searchResults2 = GetSearchResults2();
listService.setAdapter(new ListAdapter(getApplicationContext(),
searchResults2));
}
}
private ArrayList<ListModel> GetSearchResults2() {
ArrayList<ListModel> results = new ArrayList<ListModel>();
Log.v("log", " Test Results GetSearch ");
Log.v("log", " services Size " + arrayServiceId.size());
for (int i = 0; i < arrayServiceId.size(); i++) {
Log.v("log", " Test " + i);
ListModel sr1 = new ListModel();
sr1.setServicesId(arrayServiceId.get(i));
sr1.setServicesTitle(arrayServiceTitle.get(i));
// sr1.setServicesImage(arrayServiceImage.get(i));
sr1.setServicesDes(arrayServiceDes.get(i));
sr1.setServicesThirtynormal(arrayServicesthirtynormal.get(i));
sr1.setServicesThirtynormal(arrayServicesthirtynormal.get(i));
sr1.setServicesSixtynormal(arrayServicessixtynormal.get(i));
sr1.setServicesSixtymember(arrayservicessixtytymember.get(i));
sr1.setServicesNingtynormal(arrayservicesningtytynormal.get(i));
sr1.setServicesNingtymember(arrayservicesningtytymember.get(i));
results.add(sr1);
}
return results;
}
public String fetchJsonUrl(String url) {
// TODO Auto-generated method stub
StringBuffer sb = new StringBuffer();
try {
URL mUrl = new URL(url);
URLConnection uc = mUrl.openConnection();
BufferedReader buffer = new BufferedReader(new InputStreamReader(
uc.getInputStream()));
String line = "";
while ((line = buffer.readLine()) != null) {
sb.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
}
基本上,此异常意味着其中一个列表的大小为0,serviceId的大小大于0,因此,当您尝试访问空列表的第0个元素时,它会抛出异常。根据异常情况,以下任何一个arraylist都是空的,您正试图从空数组中检索值 在onPostExecute方法中
sr1.setServicesTitle(arrayServiceTitle.get(i)) ;
// sr1.setServicesImage(arrayServiceImage.get(i));
sr1.setServicesDes(arrayServiceDes.get(i));
sr1.setServicesThirtynormal(arrayServicesthirtynormal.get(i));
sr1.setServicesThirtynormal(arrayServicesthirtynormal.get(i));
sr1.setServicesSixtynormal(arrayServicessixtynormal.get(i));
sr1.setServicesSixtymember(arrayservicessixtytymember.get(i));
sr1.setServicesNingtynormal(arrayservicesningtytynormal.get(i));
sr1.setServicesNingtymember(arrayservicesningtytymember.get(i));
是的。我通过webservice获得所有响应。我获得的大小为1。尝试使用调试器查看您尝试访问的每个列表的大小。我使用了调试器,但每次获得大小为1的响应时,只需在循环之前插入以下代码:Log.dlog,serviceTitle:+arrayServiceTitle.size+serviceDes:+arrayServiceDes.dize+thirtynormal:+SerrayServicestThirtyNormal.size+sixtynormal:+ArrayServicesExtyNormal.size+ningtynormal:+ArrayServicesIngtyNormal.size+ningtymember:+ArrayServicesIngtyMember.size;并检查每个数字是否都大于零。我得到的服务标题是:1服务项:1第三项正常:0第六项正常:0第六项成员:0第六项正常:0第六项成员:0第六项正常:0第六项成员:0第六项正常:0第六项成员:0错误日志显示com.example.listcheck.ListActivity.GetSearchResults2ListActivity.java:284。告诉我哪条线是284号线?