【发布时间】:2014-02-27 06:20:06
【问题描述】:
我的应用程序出现错误。我正在做 JSON 解析。解析没问题,但是我没有得到问题出现在哪里。
我的 JSON 是:
{"status":1,
"magazines":[{
"magazinetitle": "Test Magazine 1",
"magazineid": 100,
"magazinecoverthumburl": "pages/page1.jpg",
"magazinecoverlargeurl": "pages/page1.jpg",
"pages":[{
"pagenumber": 1,
"thumburl":"pages/page1.jpg",
"largeurl":"pages/page1.jpg",
"subpages": [{
"pagenumber": 1,
"pagetype": "video"
},
{
"pagenumber": 2,
"pagetype": "video"
},
{
"pagenumber": 3,
"pagetype": "video"
},
{
"pagenumber": 4,
"pagetype": "image"
}]
},
{
"pagenumber": 2,
"thumburl":"pages/page2.jpg",
"largeurl":"pages/page2.jpg",
"subpages":[]
},
{
"pagenumber": 3,
"thumburl":"pages/page3.jpg",
"largeurl":"pages/page3.jpg",
"subpages":[]
},
{
"pagenumber": 4,
"thumburl":"pages/page4.jpg",
"largeurl":"pages/page4.jpg",
"subpages":[]
},
{
"pagenumber": 5,
"thumburl":"pages/page5.jpg",
"largeurl":"pages/page5.jpg",
"subpages":[]
},
{
"pagenumber": 6,
"thumburl":"pages/page6.jpg",
"largeurl":"pages/page6.jpg",
"subpages": [{
"pagenumber": 1,
"pagetype": "video"
},
{
"pagenumber": 2,
"pagetype": "video"
},
{
"pagenumber": 3,
"pagetype": "video"
},
{
"pagenumber": 4,
"pagetype": "image"
}]
},
{
"pagenumber": 7,
"thumburl":"pages/page7.jpg",
"largeurl":"pages/page7.jpg",
"subpages":[]
},
{
"pagenumber": 8,
"thumburl":"pages/page8.jpg",
"largeurl":"pages/page8.jpg",
"subpages":[]
},
{
"pagenumber": 9,
"thumburl":"pages/page15.jpg",
"largeurl":"pages/page15.jpg",
"subpages": [{
"pagenumber": 1,
"pagetype": "video"
},
{
"pagenumber": 2,
"pagetype": "video"
},
{
"pagenumber": 3,
"pagetype": "video"
},
{
"pagenumber": 4,
"pagetype": "image"
}]
},
{
"pagenumber": 10,
"thumburl":"pages/page8.jpg",
"largeurl":"pages/page8.jpg",
"subpages":[]
}]
},
{
"magazinetitle": "Test Magazine 2",
"magazineid": 101,
"magazinecoverthumburl": "pages/page2.jpg",
"magazinecoverlargeurl": "pages/page2.jpg",
"pages":[{
"pagenumber": 1,
"thumburl":"pages/page1.jpg",
"largeurl":"pages/page1.jpg",
"subpages":[]
},
{
"pagenumber": 2,
"thumburl":"pages/page2.jpg",
"largeurl":"pages/page2.jpg",
"subpages":[]
},
{
"pagenumber": 3,
"thumburl":"pages/page3.jpg",
"largeurl":"pages/page3.jpg",
"subpages":[]
},
{
"pagenumber": 4,
"thumburl":"pages/page4.jpg",
"largeurl":"pages/page4.jpg",
"subpages":[]
},
{
"pagenumber": 5,
"thumburl":"pages/page5.jpg",
"largeurl":"pages/page5.jpg",
"subpages":[]
},
{
"pagenumber": 6,
"thumburl":"pages/page6.jpg",
"largeurl":"pages/page6.jpg",
"subpages":[]
},
{
"pagenumber": 7,
"thumburl":"pages/page7.jpg",
"largeurl":"pages/page7.jpg",
"subpages": [{
"pagenumber": 1,
"pagetype": "video"
},
{
"pagenumber": 2,
"pagetype": "video"
},
{
"pagenumber": 3,
"pagetype": "video"
},
{
"pagenumber": 4,
"pagetype": "image"
}]
},
{
"pagenumber": 8,
"thumburl":"pages/page13.jpg",
"largeurl":"pages/page13.jpg",
"subpages":[]
},
{
"pagenumber": 9,
"thumburl":"pages/page14.jpg",
"largeurl":"pages/page14.jpg",
"subpages": [{
"pagenumber": 1,
"pagetype": "video"
},
{
"pagenumber": 2,
"pagetype": "video"
},
{
"pagenumber": 3,
"pagetype": "video"
},
{
"pagenumber": 4,
"pagetype": "image"
}]
}]
// And so on magazine, pages, subpages are there...
}]}
我的后台代码如下:
全局变量是
// contacts JSONArray
public static JSONArray status = null, magazines = null, pages = null, subpages = null;
doInBackground(Void...arg0) 代码:
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.POST);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
status = jsonObj.getJSONArray(TAG_MAGAZINES);
Magazine magazine1 = new Magazine();
// looping through All Contacts
for (int i = 0; i < status.length(); i++) {
JSONObject magazine = status.getJSONObject(i);
String magazineTitle = magazine.getString(TAG_MAGAZINETITLE);
magazine1.setMagazineTitle(magazineTitle);
magazine1.setMagazineid(String.valueOf(magazine.getInt(TAG_MAGAZINEID)));
magazine1.setMagazinecoverthumburl(magazine.getString(TAG_MAGAZINECOVERTHUMBURL));
magazine1.setMagazinecoverlargeurl(magazine.getString(TAG_MAGAZINECOVERLARGEURL));
String magazineCoverThumbURL = magazine.getString(TAG_MAGAZINECOVERTHUMBURL);
String magazineCoverLargeURL = magazine.getString(TAG_MAGAZINECOVERLARGEURL);*/
JSONObject jsonObjInnerString = status.getJSONObject(i);
pages = jsonObjInnerString.getJSONArray(TAG_PAGES);
Pages pagesModel = new Pages();
// looping through All Contacts
for (int j = 0; j < pages.length(); j++) {
JSONObject pagesObject = pages.getJSONObject(j);
pagesModel.setPagenumber(String.valueOf(pagesObject.getInt(TAG_PAGENUMBER)));
pagesModel.setThumburl(pagesObject.getString(TAG_THUMBURL));
pagesModel.setLargeurl(pagesObject.getString(TAG_LARGEURL));
magazine1.setPages(pagesModel);
JSONObject jsonObjSubInnerString = pages.getJSONObject(j);
subpages = jsonObjSubInnerString.getJSONArray(TAG_SUBPAGES);
SubPages subPagesModel = new SubPages();
// looping through All Contacts
for (int k = 0; k < subpages.length(); k++) {
Log.d("k",String.valueOf(k));
JSONObject subPagesObject = subpages.getJSONObject(k);
subPagesModel.setSubpagenumber(String.valueOf(subPagesObject.getInt(TAG_SUBPAGENUMBER)));
Log.d("SPgno",String.valueOf(subPagesObject.getInt(TAG_SUBPAGENUMBER)));
subPagesModel.setSubpagetype(subPagesObject.getString(TAG_SUBPAGETYPE));
subPagesModel.setSubpageurl(subPagesObject.getString(TAG_SUBPAGEURL));
pagesModel.setSubPages(subPagesModel);
}
}
// tmp hashmap for single contact
HashMap<String, String> magazineDetailsHashMap = new HashMap<String, String>();
// adding each child node to HashMap key => value
magazineDetailsHashMap.put(TAG_MAGAZINETITLE, magazineTitle);
//magazineDetailsHashMap.put(TAG_MAGAZINEID, magazineID);
// adding contact to contact list
magazineDetails.add(magazine1);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
而magzine类的代码如下:
int count = MainActivity.status.length(),l=0;
public String[] magazineTitle = new String[count], magazineid = new String[count], magazinecoverthumburl = new String[count], magazinecoverlargeurl = new String[count];
public Pages[] pages = new Pages[count];
public String[] getMagazineTitle() {
return magazineTitle;
}
public void setMagazineTitle(String magazineTitle) {
this.magazineTitle[l] = magazineTitle;
}
public String[] getMagazineid() {
return magazineid;
}
public void setMagazineid(String magazineid) {
this.magazineid[l] = magazineid;
}
public String[] getMagazinecoverthumburl() {
return magazinecoverthumburl;
}
public void setMagazinecoverthumburl(String magazinecoverthumburl) {
this.magazinecoverthumburl[l] = magazinecoverthumburl;
}
public String[] getMagazinecoverlargeurl() {
return magazinecoverlargeurl;
}
public void setMagazinecoverlargeurl(String magazinecoverlargeurl) {
this.magazinecoverlargeurl[l] = magazinecoverlargeurl;
}
public Pages[] getPages() {
return pages;
}
public void setPages(Pages pages) {
this.pages[l] = pages;
l++;
}
错误如下:
2-27 12:01:12.255: W/dalvikvm(15169): threadid=10: thread exiting with uncaught exception (group=0x4001e578)
02-27 12:01:12.255: E/AndroidRuntime(15169): FATAL EXCEPTION: AsyncTask #1
02-27 12:01:12.255: E/AndroidRuntime(15169): java.lang.RuntimeException: An error occured while executing doInBackground()
02-27 12:01:12.255: E/AndroidRuntime(15169): at android.os.AsyncTask$3.done(AsyncTask.java:200)
02-27 12:01:12.255: E/AndroidRuntime(15169): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
02-27 12:01:12.255: E/AndroidRuntime(15169): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
02-27 12:01:12.255: E/AndroidRuntime(15169): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
02-27 12:01:12.255: E/AndroidRuntime(15169): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
02-27 12:01:12.255: E/AndroidRuntime(15169): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
02-27 12:01:12.255: E/AndroidRuntime(15169): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
02-27 12:01:12.255: E/AndroidRuntime(15169): at java.lang.Thread.run(Thread.java:1019)
02-27 12:01:12.255: E/AndroidRuntime(15169): Caused by: java.lang.ArrayIndexOutOfBoundsException
02-27 12:01:12.255: E/AndroidRuntime(15169): at com.oi.jsonparsingnestingdemo.model.Magazine.setPages(Magazine.java:37)
02-27 12:01:12.255: E/AndroidRuntime(15169): at com.oi.jsonparsingnestingdemo.MainActivity$GetMagazineDetails.doInBackground(MainActivity.java:137)
02-27 12:01:12.255: E/AndroidRuntime(15169): at com.oi.jsonparsingnestingdemo.MainActivity$GetMagazineDetails.doInBackground(MainActivity.java:1)
02-27 12:01:12.255: E/AndroidRuntime(15169): at android.os.AsyncTask$2.call(AsyncTask.java:185)
02-27 12:01:12.255: E/AndroidRuntime(15169): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
02-27 12:01:12.255: E/AndroidRuntime(15169): ... 4 more
【问题讨论】:
-
什么是错误?你有 logcat 吗?
-
发布堆栈跟踪以及发生错误的行。
-
@Bhumika:我用 logcat 编辑了我的帖子。
-
可能你可以将页面数组的类型更改为arraylist,因为你必须让它成为动态的。
标签: java android arrays json parsing