列表视图中的JSON数据与图像解析错误

问题描述:

我正在使用jsonparser来解析从json响应中获取的数据和图像。当我包含此代码来解析图像输出是D/AndroidRuntime(441):关闭VM D/dalvikvm(441):调试器已分离;对象注册表有1项列表视图中的JSON数据与图像解析错误

JSONArray attachments = json.getJSONArray(KEY_ATTACHMENTS); 
       for(int j = 0; j < attachments.length(); j++){ 
        JSONObject d = attachments.getJSONObject(j); 
        JSONObject images = d.getJSONObject(KEY_IMAGES); 
        String thumbnail = d.getString(KEY_THUMB_URL); 

        JSONObject thumnails = d.getJSONObject(KEY_THUMB_URL); 
        String url = author.getString(KEY_URL); 

Am'i脚麻在解析的内容?任何人都可以帮助图像与输出中的数据一起显示。我的JSON响应是

{ 
"status": "ok", 

"posts": [ 
    { 
     "id": 2498, 
     "title": "jigsaw lamp imported from thailand", 
     "content": "<p>Hi. It&#8217;s a invitation to have a look at a unique lamp shade called jigsaw lamp from thailand. Available in multi attractive colours.</p>\n", 
     "date": "2012-12-26 09:48:15", 
     "author": { 
      "name": "Tapas123456", 
         }, 
      "attachments": [ 
      { 
       "description": "", 
       "caption": "", 
       "mime_type": "image/jpeg", 
       "images": { 

        "thumbnail": { 
         "url": "http://site/wp-content/uploads/2012/12/646675-50x47.jpg", 

        } 
       } 
      },............... 

以下是代码

 public class CustomizedListView extends Activity { 
    JSONArray posts = null; 

    // All static variables 
    static final String URL = "http://website"; 



    static final String KEY_POSTS = "posts"; 
    static final String KEY_ID = "id"; 
    static final String KEY_TITLE = "title"; 
    static final String KEY_DATE = "date"; 
    static final String KEY_CONTENT = "content"; 
    static final String KEY_AUTHOR = "author"; 
    static final String KEY_NAME = "name"; 
    static final String KEY_ATTACHMENTS = "attachments"; 
    static final String KEY_THUMB_URL = "thumbnail"; 
    static final String KEY_IMAGES = "images"; 
    static final String KEY_URL = "url"; 

    ListView list; 
    LazyAdapter adapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 


    // Creating JSON Parser instance 
      JSONParser jParser = new JSONParser(); 

      // getting JSON string from URL 
      JSONObject json = jParser.getJSONFromUrl(URL); 
      try { 
      posts = json.getJSONArray(KEY_POSTS); 
    // looping through all song nodes <song> 
      for(int i = 0; i < posts.length(); i++){ 
       JSONObject c = posts.getJSONObject(i); 
       // Storing each json item in variable 
       String id = c.getString(KEY_ID); 
       String title = c.getString(KEY_TITLE); 
       String date = c.getString(KEY_DATE); 
       String content = c.getString(KEY_CONTENT); 

       // Phone number is agin JSON Object 
       JSONObject author = c.getJSONObject(KEY_AUTHOR); 
       String name = author.getString(KEY_NAME); 

       JSONArray attachments = json.getJSONArray(KEY_ATTACHMENTS); 
       for(int j = 0; j < attachments.length(); j++){ 
        JSONObject d = attachments.getJSONObject(j); 
        JSONObject images = d.getJSONObject(KEY_IMAGES); 
        String thumbnail = d.getString(KEY_THUMB_URL); 

        JSONObject thumnails = d.getJSONObject(KEY_THUMB_URL); 
        String url = author.getString(KEY_URL); 
       } 
     // creating new HashMap 
     HashMap<String, String> map = new HashMap<String, String>(); 

     // adding each child node to HashMap key => value 
     map.put(KEY_ID, id); 
     map.put(KEY_TITLE, title); 
     map.put(KEY_DATE, date); 
     map.put(KEY_NAME, name); 
     map.put(KEY_CONTENT, content); 

     // adding HashList to ArrayList 
     songsList.add(map); 
      } 
      } catch (JSONException e) { 
       e.printStackTrace(); 

       } 


    list=(ListView)findViewById(R.id.list); 

    // Getting adapter by passing json data ArrayList 
    adapter=new LazyAdapter(this, songsList);   
    list.setAdapter(adapter); 


    // Click event for single list row 
    list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 


     } 
     });   
      } 
      } 

LazyAdapter.java

public class LazyAdapter extends BaseAdapter { 

private Activity activity; 
private ArrayList<HashMap<String, String>> data; 
private static LayoutInflater inflater=null; 
public ImageLoader imageLoader; 

public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
    activity = a; 
    data=d; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoader(activity.getApplicationContext()); 
} 

public int getCount() { 
    return data.size(); 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.list_row, null); 

    TextView title = (TextView)vi.findViewById(R.id.title); // title 
    TextView date = (TextView)vi.findViewById(R.id.artist); // artist name 
    TextView content = (TextView)vi.findViewById(R.id.duration); // duration 
    TextView name = (TextView)vi.findViewById(R.id.name); 
    // duration 
    ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image 

    HashMap<String, String> song = new HashMap<String, String>(); 
    song = data.get(position); 


    ListView list; 
    // Setting all values in listview 
    title.setText(song.get(CustomizedListView.KEY_TITLE)); 
    date.setText(song.get(CustomizedListView.KEY_DATE)); 
    content.setText(song.get(CustomizedListView.KEY_CONTENT)); 
    name.setText(song.get(CustomizedListView.KEY_NAME)); 

    imageLoader.DisplayImage(song.get(CustomizedListView.KEY_URL), thumb_image); 
    return vi; 
     } 
     } 

logcat的错误 12-29 14:42:59.152:d/AndroidRuntime(449) :CheckJNI is ON 12-29 14:42:59.273:D/AndroidRuntime(449):---注册本地函数--- 12-29 14:42:59.732:D/AndroidRuntime(449):关闭VM12-29 14:42:59.742:D/dalvikvm(449):调试器已分离;对象注册表有1项 12-29 14:42:59.752:I/AndroidRuntime(449):注意:附加线程'Binder线程#3'失败 12-29 14:43:00.172:D/AndroidRuntime(457) :>>>>>>>>>>>>>>>>>>> AndroidRuntime START < < < < < < < < < < < < < < 12-29 14:43:00.172:d/AndroidRuntime(457):CheckJNI是ON 12-29 14:43:00.292:D/AndroidRuntime(457):---注册本地函数--- 12-29 14:43:00.772:I/ActivityManager(58):开始活动:Intent {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCH ER] flg = 0x10000000 cmp = com.example.androidhive/.CustomizedListView} 12-29 14:43:00.783:D/AndroidRuntime(457):关闭VM 12-29 14:43:00.783:D/dalvikvm 457):调试器已分离;对象注册有1项 12-29 14:43:00.792:I/AndroidRuntime(457):注:连接螺纹的 '粘合线#3' 失败

+0

有在“关闭虚拟机”之前可能有趣的错误消息,你可以发布它们吗? – Henry

+0

发布logcat你可以看看它 – Tycoon

解析当前JSON作为:

JSONObject json=new JSONObject("pass your json string here"); 

    JSONArray arrjson = json.getJSONArray("posts"); 

    for(int j = 0; j < arrjson.length(); j++){ 
     JSONObject jsonimages = attachments.getJSONObject(j); 

     JSONArray attachmentsimages = jsonimages.getJSONArray("attachments"); 

     for(int i = 0; i < attachmentsimages.length(); i++){ 

      JSONObject imagesjson = attachmentsimages.getJSONObject(i); 

      JSONObject imagesjsonnew = imagesjson.getJSONObject("images"); 
      JSONObject thumnailsimages = imagesjsonnew.getJSONObject("thumbnail"); 

      String url = thumnailsimages.getString("url"); 
    } 

} 
+0

如果我删除这部分代码JSONArray attachments = json.getJSONArray(KEY_ATTACHMENTS);对于(int j = 0; j Tycoon

+0

@ArunA:意味着我没有得到你 –

+0

如果我评论上面的代码的话,我将能够得到的ListView与JSON响应获得的数据,但我想补充获得的图像从ListView中 – Tycoon