2011-11-22 180 views
2

我試圖通過擴展的ArrayList圖片列表視圖適配器

創建一個自定義列表視圖適配器,當我做下面的我不能夠從URL獲取圖片,並在列表視圖中顯示,但它顯示默認圖像從XML

Item.java

public class Item { 

    String itemTitle = "", itemTimestamp = "", itemDescription = "", itemImage =""; 
    public Item(String itemTitle, String itemTimestamp, String itemDescription, 
      String itemImage) { 
     this.itemTitle = itemTitle; 
     this.itemDescription = itemDescription; 
     this.itemTimestamp = itemTimestamp; 
     this.itemImage = itemImage; 
    } 

    public String getItemTitle() { 
     return itemTitle; 
    } 

    public void setItemTitle(String itemTitle) { 
     this.itemTitle = itemTitle; 
    } 

    public String getItemTimestamp() { 
     return itemTimestamp; 
    } 

    public void setItemTimestamp(String itemTimestamp) { 
     this.itemTimestamp = itemTimestamp; 
    } 

    public String getItemDescription() { 
     return itemDescription; 
    } 

    public void setItemDescription(String itemDescription) { 
     this.itemDescription = itemDescription; 
    } 

    public String getItemImage() { 
     return itemImage; 
    } 

    public void setItemImage(String itemImage) { 
     this.itemImage = itemImage; 
    } 

} 

ListAdapter.java

public class ListAdapter extends ArrayAdapter<Item> { 

    public ListAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
     // TODO Auto-generated constructor stub 
    } 

    private List<Item> items; 

    public ListAdapter(Context context, int resource, List<Item> items) { 
     super(context, resource, items); 
     this.items = items; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 

     if (v == null) { 
      LayoutInflater vi; 
      vi = LayoutInflater.from(getContext()); 
      v = vi.inflate(R.layout.list_item_default, null); 
     } 

     Item p = items.get(position); 

     if (p != null) { 

      TextView list_title = (TextView) v.findViewById(R.id.list_title); 
      TextView list_description = (TextView) v 
        .findViewById(R.id.list_description); 
      TextView list_timestamp = (TextView) v 
        .findViewById(R.id.list_timestamp); 
      ImageView list_image = (ImageView) v.findViewById(R.id.list_image); 

      if (list_title != null) { 
       list_title.setText(p.getItemTitle()); 
      } 

      if (list_description != null) { 
       list_description.setText(p.getItemDescription()); 
      } 

      if (list_timestamp != null) { 
       list_timestamp.setText(p.getItemTimestamp()); 
      } 

      if (list_image != null) { 
       Uri imageURI = Uri.parse(p.getItemImage()); 
       list_image.setImageURI(imageURI); 
      } 
     } 

     return v; 
    } 

} 

MessageActivity.java

public class MessagesActivity extends Activity { 

    ListView listview; 
    static ArrayList<Item> dataArray = new ArrayList<Item>(); 
    static ArrayList<Item> contentArray = new ArrayList<Item>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_messages); 

     setupViews(); 
     try { 
      contentArray = generateArray(createJson()); 
      Log.d("bMobile", createJson()); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     Log.d("bMobile", "start ListAdapter"); 
     listview.setAdapter(new ListAdapter(MessagesActivity.this, R.layout.list_item_default, 
       contentArray)); 
     Log.d("bMobile", "end ListAdapter"); 
    } 

    public void setupViews() { 

     listview = (ListView) findViewById(R.id.list_items); 

     ((TextView) findViewById(R.id.title_text)) 
       .setText(R.string.description_messages); 
    } 

    // It creates a JSON and returns JSON string 
    public String createJson() throws JSONException { 
     JSONArray itemArray = new JSONArray(); 

     JSONObject itemObject1 = new JSONObject(); 
     itemObject1.put("title", "Harsha MV"); 
     itemObject1.put("timestamp", "2 hours"); 
     itemObject1.put("description", "Bangalore, India"); 
     itemObject1.put("display_photo", "http://i.imgur.com/enUZr.jpg"); 

     JSONObject itemObject2 = new JSONObject(); 
     itemObject2.put("title", "Avinash G"); 
     itemObject2.put("timestamp", "4 days"); 
     itemObject2.put("description", "Mysore, India"); 
     itemObject2.put("display_photo", 
       "http://imgn.dt07.net/1077/1077092_b.jpg"); 

     JSONObject itemObject3 = new JSONObject(); 
     itemObject3.put("title", "Jyosna Sahoo"); 
     itemObject3.put("timestamp", "1 year"); 
     itemObject3.put("description", "Rourkela, India"); 
     itemObject3.put("display_photo", 
       "http://imgn.dt07.net/1099/1099091_b.jpg"); 

     itemArray.put(itemObject1); 
     itemArray.put(itemObject2); 
     itemArray.put(itemObject3); 

     return itemArray.toString(); 
    } 

    public ArrayList<Item> generateArray(String JSONdata) throws JSONException { 

     JSONArray listData = new JSONArray(JSONdata); 
     for (int i = 0; i < listData.length(); i++) { 

      JSONObject listObject = listData.getJSONObject(i); 
      String item_title = listObject.getString("title"); 
      String item_timestamp = listObject.getString("timestamp"); 
      String item_description = listObject.getString("description"); 
      String item_image = listObject.getString("display_photo"); 

      Item ObjectItem = new Item(item_title, item_description, 
        item_timestamp, item_image); 
      dataArray.add(ObjectItem); 

     } 
     return dataArray; 
    } 

} 

activity_messages.xml

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

    <LinearLayout 
     android:id="@+id/title_container" 
     style="@style/TitleBar" > 

     <ImageButton 
      style="@style/TitleBarAction" 
      android:contentDescription="@string/description_home" 
      android:onClick="onHomeClick" 
      android:src="@drawable/ic_title_home" /> 

     <ImageView style="@style/TitleBarSeparator" /> 

     <TextView 
      android:id="@+id/title_text" 
      style="@style/TitleBarText" /> 

     <ImageView style="@style/TitleBarSeparator" /> 

     <ImageButton 
      android:id="@+id/btn_title_refresh" 
      style="@style/TitleBarAction" 
      android:contentDescription="@string/description_refresh" 
      android:onClick="onRefreshClick" 
      android:src="@drawable/ic_title_refresh" /> 

     <ProgressBar 
      android:id="@+id/title_refresh_progress" 
      style="@style/TitleBarProgressIndicator" 
      android:visibility="gone" /> 
    </LinearLayout> 

    <ListView 
     android:id="@+id/list_items" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

    <TextView 
     android:id="@+id/android:empty" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="@string/list_empty_visitors" /> 

</LinearLayout> 

list_item_default.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" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <ImageView 
      android:id="@+id/list_image" 
      android:layout_width="64dip" 
      android:layout_height="64dip" 
      android:layout_alignParentLeft="true" 
      android:layout_marginRight="8dip" 
      android:background="@drawable/profile" > 
     </ImageView> 

     <LinearLayout 
      android:id="@+id/linearLayout2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_toRightOf="@+id/list_image" 
      android:orientation="vertical" > 

      <RelativeLayout 
       android:id="@+id/relativeLayout2" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" > 

       <TextView 
        android:id="@+id/list_title" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentLeft="true" 
        android:layout_toLeftOf="@+id/list_timestamp" 
        android:ellipsize="end" 
        android:singleLine="true" 
        android:text="Harsha Mallikarjun Vantagudi" 
        android:textSize="@dimen/text_size_medium" 
        android:textStyle="bold" > 
       </TextView> 

       <TextView 
        android:id="@+id/list_timestamp" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:padding="6dip" 
        android:paddingLeft="30dip" 
        android:singleLine="true" 
        android:text="2 hours" 
        android:textSize="@dimen/text_size_xxsmall" > 
       </TextView> 
      </RelativeLayout> 

      <TextView 
       android:id="@+id/list_description" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:ellipsize="end" 
       android:singleLine="true" 
       android:text="Bangalore, India Bangalore, India Bangalore, India Bangalore, India" 
       android:textSize="@dimen/text_size_small" > 
      </TextView> 
     </LinearLayout> 
    </RelativeLayout> 

</LinearLayout> 
+1

只是明顯的問題:你確定你的數組列表產生出來的JSON不是null? –

+0

是的,當我嘗試登錄時,我正在獲取JSON。猜猜之間獲取JSON和轉換爲陣列之間的一些問題..我想 –

回答

3

generateArray(...)返回null,您將其設置爲contentArray,然後傳入您的構造方法。你正在填充dataArray然後從不使用它。

+0

哎..謝謝,我得到了那工作:)但由於某種原因,我無法將圖像設置爲ImageView .. –

+0

能否詳細說明一下請?我看不到錯誤,他的代碼幫助我處理我想做的事情,但是我得到了同樣的錯誤。 @HarshaMV你解決了嗎?謝謝 – MayTheSchwartzBeWithYou