2014-06-11 175 views
0

我從我的php頁面獲取圖像URL與JSON解析,我需要插入圖像列表視圖,但我不知道我怎麼能做到這一點。任何人都可以幫助我?我的代碼在這裏:從列表視圖中的URL圖像

  // Getting JSON from URL 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      // getting JSON string from URL 
      JSONObject json1 = jParser.makeHttpRequest(url_all_products,"GET",params); 

      Log.d("All Products: ", json1.toString()); 
       try { 
         products = json1.getJSONArray(TAG_PRODUCTS); 

         // looping through All Products 
         for (int i = 0; i < products.length(); i++) { 
          JSONObject c = products.getJSONObject(i); 
          String name = c.getString(TAG_NAME); 
      String url = c.getString(TAG_URL); 

       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put(TAG_URL, url); 
       map.put(TAG_NAME, name); 
       productsList.add(map); 
       ListAdapter adapter = new SimpleAdapter(
        getActivity(), productsList, 
         R.layout.items, new String[] { 
           TAG_NAME}, 
         new int[] { R.id.name }); 
       ListView list = (ListView) getView().findViewById(R.id.list); 
       list.setAdapter(adapter); 





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

使用Android-Universal-Image-Loader – sakir

+0

我不知道如何,我需要例如e – user3730912

回答

1

其更好地使用惰性加載

您可以使用thest1/LazyList

或高級圖像緩存Android的通用 - 圖片 - 裝載機 From here

Android的Universal- Image-Loader包含不同的例子來列出從URL到列表視圖的圖像。

編輯

你的主要Functiom後,您可以設置適配器

在你的代碼的設置和初始化內部列表視圖for循環這是錯誤的,你需要使用自定義適配器來使用延遲加載來列出圖像。下面的代碼是我編輯了它的一部分後的代碼。

// Getting JSON from URL 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    // getting JSON string from URL 
    JSONObject json1 = jParser.makeHttpRequest(url_all_products,"GET",params); 

    Log.d("All Products: ", json1.toString()); 
     try { 
       products = json1.getJSONArray(TAG_PRODUCTS); 

       // looping through All Products 
       for (int i = 0; i < products.length(); i++) { 
        JSONObject c = products.getJSONObject(i); 
        String name = c.getString(TAG_NAME); 
    String url = c.getString(TAG_URL); 

     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put(TAG_URL, url); 
     map.put(TAG_NAME, name); 
     productsList.add(map); 





       } 

//DON'T SET ADAPTER IN A LOOP 
       MyListViewAdaptor adapter = new MyListViewAdaptor(
         getActivity(), productsList, 
         ); 
       ListView list = (ListView) getView().findViewById(R.id.list); 
       list.setAdapter(adapter); 

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

寫適配器俗以顯示圖像進行比SimpleAdapter其他的列表視圖,並使用在adpator在惰性加載所用的功能和顯示image.Let請MyListViewAdaptor.The例子如下

給出一個適配器

MyListViewAdaptor.java

public class MyListViewAdaptor extends BaseAdapter { 

// Declaring Variables 

private Activity activity; 
private ArrayList<HashMap<String, String>> myarray; 
private static LayoutInflater inflater = null; 
public ImageLoader imageLoader; 
    // PLAESE READ ImageLoader IS A CLASS FROM LIB thest1/LazyList LAZYLOADING 


public MyListViewAdaptor(Activity a, ArrayList<HashMap<String, String>> myarray) { 

    activity = a; 

    this.myarray = myarray; 

    inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    imageLoader = new ImageLoader(activity); 


} 

public int getCount() { 

    return myarray.size(); 

} 

public Object getItem(int position) { 

    return position; 

} 

public long getItemId(int position) { 

    return position; 

} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    if (convertView == null) 

     // Get the view from mainpage_row.xml 

     vi = inflater.inflate(R.layout.yourlistviewrowname, null); 


    ImageView userImage = (ImageView) vi 
      .findViewById(R.id.youtimageviewname); 
TextView textName = (TextView) vi.findViewById(R.id.yourtextviewname); 

    HashMap<String, String> datamap = new HashMap<String, String>(); 
    datamap = myarray.get(position); 

    textName.setText(datamap.get("yourTextKeyHere")); 




    imageLoader.DisplayImage(datamap.get("yourImageKeyHere"), userImage); 


    return vi; 
} 
} 

不要忘記添加權限

<uses-permission android:name="android.permission.INTERNET" /> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

希望這將幫助你

+0

我使用LazyList,但我不知道如何將所有URL都放入此適配器。 – user3730912

+0

plaese添加你的適配器類代碼 – Ramz

+0

謝謝,它的作品! – user3730912

1

這裏是適配器類

class ItemAdapter extends BaseAdapter { 

     private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); 

     private class ViewHolder { 
      public TextView text; 
      public ImageView image; 
     } 

     @Override 
     public int getCount() { 
      return imageUrls.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      View view = convertView; 
      final ViewHolder holder; 
      if (convertView == null) { 
       view = getLayoutInflater().inflate(R.layout.item_list_image, parent, false); 
       holder = new ViewHolder(); 
       holder.text = (TextView) view.findViewById(R.id.text); 
       holder.image = (ImageView) view.findViewById(R.id.image); 
       view.setTag(holder); 
      } else { 
       holder = (ViewHolder) view.getTag(); 
      } 

      holder.text.setText("Item " + (position + 1)); 

      imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener); 

      return view; 
     } 
    } 

,這是主要的活動

public class ImageListActivity extends AbsListViewBaseActivity { 

    DisplayImageOptions options; 

    String[] imageUrls; 

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

     Bundle bundle = getIntent().getExtras(); 
     imageUrls = bundle.getStringArray(Extra.IMAGES); 

     options = new DisplayImageOptions.Builder() 
      .showImageOnLoading(R.drawable.ic_stub) 
      .showImageForEmptyUri(R.drawable.ic_empty) 
      .showImageOnFail(R.drawable.ic_error) 
      .cacheInMemory(true) 
      .cacheOnDisc(true) 
      .considerExifParams(true) 
      .displayer(new RoundedBitmapDisplayer(20)) 
      .build(); 

     listView = (ListView) findViewById(android.R.id.list); 
     ((ListView) listView).setAdapter(new ItemAdapter()); 
     listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       startImagePagerActivity(position); 
      } 
     }); 
    } 
} 

**是例如從通用的官方網站圖像加載器