首页 文章

假设JSON响应中没有图像,但数据将存在,然后无法在列表视图中显示图像和数据

提问于
浏览
1

我在listview中添加从webservice(json响应)获得的图像和数据 . 有些时候图像存在于数组中,有时没有图像,如果图像存在于数组中,那么我得到正确的输出图像和数据将显示在列表视图中但如果数组中没有图像那么即使数据存在但它也不会显示listview中的任何内容 . 在这里挣扎如果声明以下是我的代码任何答案将不胜感激任何人可以帮助吗?

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 {
                JSONArray 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);
                // to remove all <P> </p> and 
and replace with "" content = content.replace("
", ""); content = content.replace("<p>", ""); content = content.replace("</p>", ""); //authornumber is agin JSON Object JSONObject author = c.getJSONObject(KEY_AUTHOR); String name = author.getString(KEY_NAME); JSONArray atta = c.getJSONArray("attachments"); for(int j = 0; j < atta.length(); j++){ JSONObject d = atta.getJSONObject(j); String slug = d.getString(KEY_SLUG); JSONObject images = d.getJSONObject(KEY_IMAGES); JSONObject thumbnail = images.getJSONObject(KEY_THUMB_URL); String url = thumbnail.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); map.put(KEY_SLUG, slug); map.put(KEY_URL, url); // adding HashList to ArrayList songsList.add(map); } } } catch (JSONException e) { e.printStackTrace(); } list=(ListView)findViewById(android.R.id.list); list.setOnScrollListener(this); // Getting adapter by passing json data ArrayList adapter=new LazyAdapter(this, songsList); list.setAdapter(adapter);

2 回答

  • 1

    这是因为你在一个单独的 try-catch 块中做了所有事情 . 当没有图像时,它会抛出一个错误,跳出你的循环 . 您应该单独添加 try-catch 块来读取图像:

    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 {
                    JSONArray 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);
                    // to remove all <P> </p> and 
    and replace with "" content = content.replace("
    ", ""); content = content.replace("<p>", ""); content = content.replace("</p>", ""); //authornumber is agin JSON Object JSONObject author = c.getJSONObject(KEY_AUTHOR); String name = author.getString(KEY_NAME); String url = null; String slug = null; try { JSONArray atta = c.getJSONArray("attachments"); for(int j = 0; j < atta.length(); j++){ JSONObject d = atta.getJSONObject(j); slug = d.getString(KEY_SLUG); JSONObject images = d.getJSONObject(KEY_IMAGES); JSONObject thumbnail = images.getJSONObject(KEY_THUMB_URL); url = thumbnail.getString(KEY_URL); } catch (Exception e) {} // 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); map.put(KEY_SLUG, slug); map.put(KEY_URL, url); // adding HashList to ArrayList songsList.add(map); } } } catch (JSONException e) { e.printStackTrace(); } list=(ListView)findViewById(android.R.id.list); list.setOnScrollListener(this); // Getting adapter by passing json data ArrayList adapter=new LazyAdapter(this, songsList); list.setAdapter(adapter);
  • 1

    在listAdapter的getView()方法中检查url值 . 如果它为空或为空,则显示一些存根图像(某些图像,如无图像可用 - >将其保存在res中) .

相关问题