您好我查看了所有的stackoverflow并尝试了一些解决方案,但我仍然无法解决我的问题。我对json解析和android仍然相当新,任何帮助都将非常感激。
这是我的json网址 - http://vina.harvestcamasu.com/vina/xml/image.json 这是我试过的代码
json = jParser.getJSONFromUrl(url);
JSONObject json = jParser.getJSONFromUrl(url);
System.out.println("json is "+json);
System.out.println("Length"+TAG_IMAGE
.length());
for (int i = 0; i < json.length(); i++) {
try {
String atObj = Integer.toString(i);
System.out.println(atObj);
JSONObject jObj = json.getJSONObject(atObj);
System.out.println(jObj.getString("Name"));
System.out.println(jObj.getString("PicURL"));
System.out.println(jObj.getString("Caption"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
JSONArray iArray;
try {
iArray = json.getJSONArray(TAG_IMAGE);
for (int i = 0; i < iArray.length(); i++) {
JSONObject m = iArray.getJSONObject(i);
String Id = m.getString(TAG_ID);
String Name = m.getString(TAG_NAME);
String PicURL = m.getString(TAG_PICURL);
String Date = m.getString(TAG_DATE);
String Caption = m.getString(TAG_CAPTION);
//create a new hashmap
HashMap<String, String> map = new HashMap<String, String>();
//adding nodes into hashmap
map.put(TAG_ID, Id);
map.put(TAG_NAME, Name);
map.put(TAG_PICURL, PicURL);
map.put(TAG_DATE, Date);
map.put(TAG_CAPTION, Caption);
//adding hashlist into arraylist
imagelist.add(map);
images[i] = m.getString(TAG_PICURL);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
InputStream is1 = (InputStream) new URL(images[0]).getContent();
d1 = Drawable.createFromStream(is1, "src name");
InputStream is2 = (InputStream) new URL(images[1]).getContent();
d2 = Drawable.createFromStream(is2, "src name");
InputStream is3 = (InputStream) new URL(images[2]).getContent();
d3 = Drawable.createFromStream(is3, "src name");
InputStream is4 = (InputStream) new URL(images[3]).getContent();
d4 = Drawable.createFromStream(is4, "src name");
InputStream is5 = (InputStream) new URL(images[4]).getContent();
d5 = Drawable.createFromStream(is5, "srcname");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
并且日志不断返回错误
12-04 10:12:02.892: W/System.err(28210): org.json.JSONException: No value for 0
12-04 10:12:02.892: W/System.err(28210): at
org.json.JSONObject.get(JSONObject.java:354)
12-04 10:12:02.892: W/System.err(28210): at
org.json.JSONObject.getJSONObject(JSONObject.java:569)
12-04 10:12:02.892: W/System.err(28210): at
vinajson.img.MainActivity$1.doInBackground(MainActivity.java:82)
12-04 10:12:02.892: W/System.err(28210): at
vinajson.img.MainActivity$1.doInBackground(MainActivity.java:1)
12-04 10:12:02.892: W/System.err(28210): at
android.os.AsyncTask$2.call(AsyncTask.java:264)
12-04 10:12:02.892: W/System.err(28210): at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-04 10:12:02.892: W/System.err(28210): at
java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-04 10:12:02.900: W/System.err(28210): at
android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
12-04 10:12:02.900: W/System.err(28210): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-04 10:12:02.900: W/System.err(28210): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-04 10:12:02.900: W/System.err(28210): at
java.lang.Thread.run(Thread.java:856)
12-04 10:12:02.900: W/System.err(28210): org.json.JSONException: No value for Image
12-04 10:12:02.900: W/System.err(28210): at
org.json.JSONObject.get(JSONObject.java:354)
12-04 10:12:02.900: W/System.err(28210): at
org.json.JSONObject.getJSONArray(JSONObject.java:544)
12-04 10:12:02.900: W/System.err(28210): at
vinajson.img.MainActivity$1.doInBackground(MainActivity.java:93)
12-04 10:12:02.900: W/System.err(28210): at
vinajson.img.MainActivity$1.doInBackground(MainActivity.java:1)
12-04 10:12:02.900: W/System.err(28210): at
android.os.AsyncTask$2.call(AsyncTask.java:264)
12-04 10:12:02.900: W/System.err(28210): at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-04 10:12:02.900: W/System.err(28210): at
java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-04 10:12:02.900: W/System.err(28210): at
android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
12-04 10:12:02.900: W/System.err(28210): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-04 10:12:02.900: W/System.err(28210): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-04 10:12:02.900: W/System.err(28210): at
java.lang.Thread.run(Thread.java:856)
12-04 10:12:02.900: W/System.err(28210): java.net.MalformedURLException
答案 0 :(得分:0)
因为Image JSONArray
位于Artist JSONObject
内且艺术家位于Gallery JSONObject
内,所以您应该遵循相同的层次结构从Image JSONArray中提取JSONObject以检索所有值:
JSONObject json = jParser.getJSONFromUrl(url);
// get Gallery JSONObject
JSONObject json_gallery=json.getJSONObject("Gallery");
// get Artist JSONObject
JSONObject json_artist=json_gallery.getJSONObject("Artist");
// now get Image JSONArray of JSONObject from json_artist
iArray = json_artist.getJSONArray(TAG_IMAGE);
for (int i = 0; i < iArray.length(); i++) {
// your code here for retrieving values
}