从listview中的json url加载图像

时间:2012-12-24 12:02:53

标签: android json

在做了大量研究之后发表了这个问题。将包含这些图像的url的json数据中的图像添加到listview.I中包含以下代码,但不知道要实现哪些代码来加载图像。

      public class MainActivity extends ListActivity {



   // url to make request
    private static String url = "http://website/?json=get_recent_posts";

    // JSON Node names
   private static final String TAG_POSTS = "posts";
   private static final String TAG_ID = "id";
   private static final String TAG_TITLE = "title";
   private static final String TAG_DATE = "date";
   private static final String TAG_CONTENT = "content";
   private static final String TAG_AUTHOR = "author";
   private static final String TAG_NAME = "name";
   private static final String TAG_IMAGES = "images";
   private static final String TAG_THUMBNAIL = "thumbnail";

   // contacts JSONArray
    JSONArray posts = null;

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



    // Hashmap for ListView
    ArrayList<HashMap<String, String>> contactList = new   ArrayList<HashMap<String, String>>();

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

    // getting JSON string from URL
    JSONObject json = jParser.getJSONFromUrl(url);

    try {
        // Getting Array of Contacts
        posts = json.getJSONArray(TAG_POSTS);

        // looping through All Contacts
        for(int i = 0; i < posts.length(); i++){
            JSONObject c = posts.getJSONObject(i);

            // Storing each json item in variable
            String id = c.getString(TAG_ID);
            String title = c.getString(TAG_TITLE);
            String date = c.getString(TAG_DATE);
            String content = c.getString(TAG_CONTENT);
            // to remove all <P> </p> and <br /> and replace with ""
             content = content.replace("<br />", "");
             content = content.replace("<p>", "");
             content = content.replace("</p>", "");

            // Author is agin  JSON Object
            JSONObject author = c.getJSONObject(TAG_AUTHOR);
            String name = author.getString(TAG_NAME);

            JSONObject images = c.getJSONObject(TAG_IMAGES);
            String thumbnail = images.getString(TAG_THUMBNAIL);
            // creating new HashMap
             HashMap<String, String> map = new HashMap<String,  String>();

            // adding each child node to HashMap key => value
            map.put(TAG_ID, id);
            map.put(TAG_TITLE, title);
            map.put( TAG_DATE, date);
            map.put( TAG_NAME, name);
            map.put( TAG_CONTENT, content);
            // adding HashList to ArrayList
            contactList.add(map);
        }   
    } catch (JSONException e) {
        e.printStackTrace();
    }


    /**
     * Updating parsed JSON data into ListView
     * */
    ListAdapter adapter = new SimpleAdapter(this, contactList,
            R.layout.list_row,
            new String[] { TAG_TITLE, TAG_DATE, TAG_NAME, TAG_CONTENT }, new int[] {
                    R.id.name, R.id.email,R.id.mobile, R.id.content });

    setListAdapter(adapter);

    // selecting single ListView item
    ListView lv = getListView();

    // Launching new screen on Selecting Single ListItem
    lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String title = ((TextView)    view.findViewById(R.id.name)).getText().toString();
            String date = ((TextView) view.findViewById(R.id.email)).getText().toString();
            String name = ((TextView) view.findViewById(R.id.mobile)).getText().toString();
            String content = ((TextView)  view.findViewById(R.id.content)).getText().toString();

            // Starting new intent
            Intent in = new Intent(getApplicationContext(),  SampleDesp.class);
            in.putExtra(TAG_TITLE, title);
            in.putExtra(TAG_DATE, date);
            in.putExtra(TAG_NAME, name);
            in.putExtra(TAG_CONTENT, content);
            startActivity(in);

        }
    });

}

JSON数据格式

    { "status": "ok","count": 10,"count_total": 429,"pages": 43,"posts": [ {       "id": 2512,"title": "Sansui Eq Sound Processor 2 Mic option in a single unit.","content": "<p>Sansui Eq Sound Processor 2 Mic option in a single unit For sale .<br />\nFor more details contact<br />\n9886673699</p>\n", "date": "2012-12-24 09:39:53",
"author": {"name": "sales" }, "attachments": [{  "images": {"thumbnail": {
"url": "http://site/wp-content/uploads/2012/12/372967-50x37.jpg"
 } } }}],.......

1 个答案:

答案 0 :(得分:1)

实施Load image的代码:

private Bitmap DownloadImage(String URL)
    {        
//      System.out.println("image inside="+URL);
        Bitmap bitmap = null;
        InputStream in = null;        
        try {
            in = OpenHttpConnection(URL);
            bitmap = BitmapFactory.decodeStream(in);
            in.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
//        System.out.println("image last");
        return bitmap;                
    }
    private InputStream OpenHttpConnection(String urlString)
            throws IOException
            {
                InputStream in = null;
                int response = -1;

                URL url = new URL(urlString);
                URLConnection conn = url.openConnection();

                if (!(conn instanceof HttpURLConnection))                    
                    throw new IOException("Not an HTTP connection");

                try{
                    HttpURLConnection httpConn = (HttpURLConnection) conn;
                    httpConn.setAllowUserInteraction(false);
                    httpConn.setInstanceFollowRedirects(true);
                    httpConn.setRequestMethod("GET");
                    httpConn.connect();

                    response = httpConn.getResponseCode();                
                    if (response == HttpURLConnection.HTTP_OK) 
                    {
                        in = httpConn.getInputStream();                                
                    }                    
                }
                catch (Exception ex)
                {
                    throw new IOException("Error connecting");            
                }
                return in;    
    }