2014-02-19 7 views
0

listview에서 json url의 이미지를 표시하고 싶습니다.
여기 내 코드입니다 :

activity_main.xml
안드로이드에서 listview에 imageview를 추가하는 방법

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/getdata" /> 

    <Button 
     android:id="@+id/getdata" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="23dp" 
     android:text="Get Data" /> 

</RelativeLayout><br> 


list_v.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/feed" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/tags" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <ImageView 
     android:id="@+id/img" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout><br> 


MainActivity.java

package learn2crack.listview; 

import java.util.ArrayList; 
import java.util.HashMap; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

import learn2crack.listview.library.JSONParser; 

public class MainActivity extends Activity { 
    ListView list; 
    TextView feed_id; 
    TextView tags; 
    ImageView thumbnail; 
    Button Btngetdata; 
    ArrayList<HashMap<String, String>> snowlist = new ArrayList<HashMap<String, String>>(); 
    // URL to get JSON Array 
    private static String url = "http://instaapi.social-fair.com.208-91-199-15.md-plesk-web1.webhostbox.net/api.php?type=tag&tag=snow"; 

    // JSON Node Names 
    private static final String TAG_main = "main"; 
    private static final String TAG_feed = "feed_id"; 
    private static final String TAG_tags = "tags"; 
    private static final String TAG_thumb = "thumbnail"; 

    JSONArray android = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     snowlist = new ArrayList<HashMap<String, String>>(); 

     Btngetdata = (Button) findViewById(R.id.getdata); 
     Btngetdata.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       new JSONParse().execute(); 
      } 
     }); 
    } 

    private class JSONParse extends AsyncTask<String, String, JSONObject> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      feed_id = (TextView) findViewById(R.id.feed); 
      tags = (TextView) findViewById(R.id.tags); 
      thumbnail = (ImageView) findViewById(R.id.img); 
     } 

     @Override 
     protected JSONObject doInBackground(String... args) { 

      JSONParser jParser = new JSONParser(); 

      // Getting JSON from URL 
      JSONObject json = jParser.getJSONFromUrl(url); 
      return json; 
     } 

     @Override 
     protected void onPostExecute(JSONObject json) { 

      try { 
       // Getting JSON Array from URL 
       android = json.getJSONArray(TAG_main); 
       for (int i = 0; i < android.length(); i++) { 
        JSONObject c = android.getJSONObject(i); 

        // Storing JSON item in a Variable 
        String feed = c.getString(TAG_feed); 
        String tags = c.getString(TAG_tags); 
        String thumb = c.getString(TAG_thumb); 

        // Adding value HashMap key => value 
        HashMap<String, String> map = new HashMap<String, String>(); 

        map.put(TAG_feed, feed); 
        map.put(TAG_tags, tags); 
        map.put(TAG_thumb, thumb); 

        snowlist.add(map); 
        list = (ListView) findViewById(R.id.list); 

        ListAdapter adapter = new SimpleAdapter(MainActivity.this, 
          snowlist, R.layout.list_v, new String[] { TAG_feed, 
            TAG_tags, TAG_thumb }, new int[] { 
            R.id.feed, R.id.tags, R.id.img }); 
        list.setAdapter(adapter); 
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

         @Override 
         public void onItemClick(AdapterView<?> parent, 
           View view, int position, long id) { 
          Toast.makeText(
            MainActivity.this, 
            "You Clicked at " 
              + snowlist.get(+position).get(
                "tags"), Toast.LENGTH_SHORT) 
            .show(); 

         } 
        }); 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    } 

} 



JSonParser.java

package learn2crack.listview.library; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.util.Log; 

public class JSONParser { 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    // constructor 
    public JSONParser() { 

    } 

    public JSONObject getJSONFromUrl(String url) { 

     // Making HTTP request 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent();   

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 
} 



는 JSON의 URL에서 텍스트를 표시하지만, 이미지
를 표시하지 내가 목록보기에 이미지를 표시 할 수있는 방법 좀 도와주세요?
감사합니다 ...

+0

에서 XML의 listView 요소는'android : layout_above = "@ + id/getdata"를 android : layout_above = "@ id/getdata"로 대체해야합니다. – user2340612

+0

작동하지 않습니다 ... –

+0

그래,하지만 그건 오류 였어.) – user2340612

답변

0

귀하의 ImageView는 URL이 포함 된 문자열로 설정됩니다. 당신은 당신이 사용하는 구글이 ImageDownloadTask

을 제공하는이 클래스를 사용할 수 있습니다, 인터넷에서 해당 이미지를 얻을 수 있습니다 그리고 당신은이 같은 이미지를 설정할 때 당신은 당신의 어댑터를 호출 할 수 있습니다

new ImageDownloaderTask(imgLocal,position,this).execute(objectPlace.objectInfo.image); 
+0

재생 해 주셔서 감사합니다. –

관련 문제