Tycoon
Tycoon

Reputation: 538

Loading images from json url in listview

After doing a lot of research posting this question. Adding Images from json data which contains url's of these images into listview.I have included the following code but don't know exactly which code to implement to load image.

      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 data format

    { "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"
 } } }}],.......

Upvotes: 0

Views: 1903

Answers (1)

Subburaj
Subburaj

Reputation: 5192

The code to Implement 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;    
    }

Upvotes: 1

Related Questions