2015-09-04 55 views
0

我正在阅读JSON,它工作正常。 但它无法将结果字符串添加到ArrayList中。 任何想法为什么?Android JSON处理

这是代码。

StuffPics类(更新):

public class StuffPics { 
    private String imageUrl; 
    public StuffPics() { 
    } 
    public String getImageUrl() { 
     return imageUrl; 
    } 
    public String setImageUrl(String imageUrl) { 
      return this.imageUrl; 
     } 
    @Override 
    public String toString() { 
     return "StuffPics = " + this.imageUrl; 
    } 

}

活动(更新):

private ArrayList<StuffPics> mylist; 

...

protected void onPostExecute(String result) { 
     try{ 

      String url="http://www.test.com"; 
      JSONArray jsonarray = new JSONArray(result); 
      int lengthJsonArr = jsonarray.length(); 
      for (int i = 0; i < lengthJsonArr; i++) 
      { 
       //build url 
       JSONObject jsonChildNode = jsonarray.getJSONObject(i); 
       String autcElement = jsonChildNode.optString("picUrl").toString(); 
       String img= url + autcElement; 
       System.out.println("imageUrl"+img); 
       //create object and add it to the list 
       StuffPics pic = new StuffPics(); 
       pic.getImageUrl(); 
       System.out.print("PIC"+pic); 
       mylist.add(pic); 
      } 
     }     
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

所以,第一个系统。 out显示字符串,因为他们应该b即意思是json被正确读取。 但是第二个System.out什么也没有显示。意味着我无法将字符串添加到StuffPics图片中。结果ArrayList mylist也是空的。

我在做什么错?

+0

确切的输出是什么? –

+0

“但第二个System.out什么也没有显示” – JohnK

+1

它怎么能显示没有?您正在打印'“PIC”+图片“。那不是什么... –

回答

1

那么图片是一个自定义对象StuffPics

您将需要以覆盖toString()看到的东西

例如:

@Override 
public String toString() { 
    return "StuffPics = " + this.imageUrl; 
} 

也确保MYLIST被初始化,您可以调整这样的代码:

try{ 
    String url="http://www.test.com"; 
    JSONArray jsonarray = new JSONArray(result); 
    int lengthJsonArr = jsonarray.length(); 
    for (int i = 0; i < lengthJsonArr; i++) 
    { 
     //build url 
     JSONObject jsonChildNode = jsonarray.getJSONObject(i); 
     String autcElement = jsonChildNode.optString("picUrl").toString(); 
     String img= url + autcElement; 
     System.out.println("imageUrl"+img); 
     //create object and add it to the list 
     StuffPics pic = new StuffPics(); 
     pic.setImageUrl(img); 
     System.out.print("PIC"+pic.toString()); 
     mylist.add(pic); 
    } 
}     
catch (Exception e) { 
    e.printStackTrace(); 
} 
+1

@JohnK'toString()'?在你的'StuffPics'类bro – meda

+0

你的意思只是添加到类或替换smth?当我加入时仍然如此。 – JohnK

+0

是的,因为PIC不是一个字符串,所以使用pic.toString()或pic.getImageUrl(); – meda

0

您可以使用Gson 查看您的自定义objects.son是一个Java库,可用于转换Jav一个对象转换成他们的JSON表示。

只需将对象转换为使用JSON:

String json = new Gson().Json(pic); 

和使用日志打印。

0

替换此行:

System.out.print("PIC"+pic); 

与:

System.out.print("PIC"+pic.getImageUrl()); 

您的列表不是空的,你只是无法看到您添加的网址。

+0

存在NullPointerException。所以,System.out将不会显示任何方式。 – JohnK

+0

你可以发布完整的日志吗?没有细节很难知道发生了什么。 –