Note that there are some explanatory texts on larger screens.

plurals
  1. PODownload images from remote URLs
    text
    copied!<p>Currently I am developing an Android app containing a list view which displays links for Youtube videos. The application gets its data from the server as JSON. Now I am trying to display thumbnails for these video from this subdomain - <code>http://img.youtube.com/vi/</code>.</p> <p>But the images don't show up in the list view.</p> <p>Here is the code for the project :</p> <p>1 - canticlesActivity.java</p> <pre><code>package com.shadatv.shada; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.ListActivity; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.ListAdapter; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; public class canticlesActivity extends ListActivity { TextView httpStuff; HttpClient client; JSONArray canticles; String picpath = "http://img.youtube.com/vi/"; File sdcard = Environment.getExternalStorageDirectory(); File shadaRoot = new File(sdcard.getAbsolutePath() + "/shada_Folder"); private static final String CA_NAME = "ca_name"; private static final String CA_LINK = "ca_link"; private static final String CA_IMG = "ca_img"; private static final String URL = "http://dt-works.com/ags/shadatv/canticles/android_data"; ArrayList&lt;HashMap&lt;String, String&gt;&gt; canticlesList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.canticles); httpStuff = (TextView) findViewById(R.id.textView1); client = new DefaultHttpClient(); new Read().execute(); } public JSONArray allCanticles() throws ClientProtocolException, IOException, JSONException { StringBuilder url = new StringBuilder(URL); HttpGet get = new HttpGet(url.toString()); HttpResponse r = client.execute(get); int status = r.getStatusLine().getStatusCode(); if (status == 200) { HttpEntity e = r.getEntity(); String data = EntityUtils.toString(e); JSONArray canticles = new JSONArray(data); return canticles; } else { Toast.makeText(getBaseContext(), "error", Toast.LENGTH_SHORT).show(); return null; } } public void downloadImage(String fileURL) { try { // Toast.makeText(getBaseContext(), "baaad", Toast.LENGTH_SHORT).show(); String finlpth = ""; finlpth = picpath + fileURL + "/2.jpg"; shadaRoot.mkdirs(); URL u = new URL(finlpth); HttpURLConnection c = (HttpURLConnection) u.openConnection(); c.setRequestMethod("GET"); c.setDoOutput(true); c.connect(); File DownloadedFile = new File(shadaRoot, fileURL + ".jpg"); // if(!outfile.exists()) FileOutputStream f = new FileOutputStream(DownloadedFile); InputStream in = c.getInputStream(); byte[] buffer = new byte[1024]; int len1 = 0; while ((len1 = in.read(buffer)) &gt; 0) { f.write(buffer, 0, len1); } f.close(); } catch (Exception e) { Log.d("Downloader", e.getMessage()); } } public class Read extends AsyncTask&lt;String, String, String&gt;{ @Override protected String doInBackground(String... params) { canticlesList = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;(); try { canticles = allCanticles(); for (int i = 0; i &lt; canticles.length(); i++) { JSONObject canticle = canticles.getJSONObject(i); String ca_name = canticle.getString(CA_NAME); String ca_link = canticle.getString(CA_LINK); downloadImage(ca_link); HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;(); map.put(CA_NAME, ca_name); map.put(CA_LINK, ca_link); map.put(CA_IMG, ca_link + ".jpg"); canticlesList.add(map); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { ListAdapter adapter = new SimpleAdapter(canticlesActivity.this, canticlesList,R.layout.list_item, new String[] {CA_NAME, CA_LINK, CA_IMG}, new int[] {R.id.ca_name, R.id.ca_link, R.id.ca_img}); setListAdapter(adapter); } } } </code></pre> <p>2 - list_item.xml</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/list_selector" android:orientation="horizontal" &gt; &lt;!-- Product id (pid) - will be HIDDEN - used to pass to other activity --&gt; &lt;ImageView android:id="@+id/ca_img" android:layout_width="50dip" android:layout_height="50dip" android:contentDescription="@string/desc" /&gt; &lt;TextView android:id="@+id/ca_name" android:layout_width="fill_parent" android:layout_height="wrap_content" /&gt; &lt;!-- Name Label --&gt; &lt;TextView android:id="@+id/ca_link" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="6dip" android:paddingLeft="6dip" android:textSize="17sp" android:textStyle="bold" android:visibility="gone" /&gt; &lt;/LinearLayout&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload