2012-12-04 65 views
1

我想从URL获取图像,然后将其添加到列表视图。我可以成功获取图像,但我很努力将其添加到列表视图。从JSON URL加载图像到列表视图

我已经试过这样:

ListView lv = (ListView) findViewById(R.id.list); 

    try { 

     URL url = new URL("http://devcms.barcodo.com/Images/ProductImages/ThumbnailImages100/EG-BIRT-ST-JA_th.jpg"); 
     HttpGet httpRequest = null; 
     httpRequest = new HttpGet(url.toURI()); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response = (HttpResponse) httpclient.execute(httpRequest); 
     HttpEntity entity = response.getEntity(); 
     BufferedHttpEntity b_entity = new BufferedHttpEntity(entity); 
     InputStream input = b_entity.getContent(); 
     Bitmap bitmap = BitmapFactory.decodeStream(input); 

     HashMap<String, Object> docList = new HashMap<String, Object>(); 
     docList.put("IMAGE", bitmap); 

     ArrayList<HashMap<String, Object>> al = new ArrayList<HashMap<String, Object>>(); 
     al.add(docList); 

     simpleAdapter = new SimpleAdapter(this, al, R.layout.list_item,new String[] { "IMAGE" }, new int[] { R.id.image}); 
     lv.setAdapter(simpleAdapter); 

注:我能够把它变成一个ImageView的,但想提取到一个列表视图。

+0

你得到一个错误?我认为这个实现只适用于将文本应用于文本视图。您的适配器可能认为您的图像是文本。您可能需要制作自定义适配器。 – mango

+0

@mango我dint得到任何错误。我可以在Imageview中获取图像,但不能在listview中获取图像。 Y? –

回答

3

尝试以下操作:

  public class ImageURL extends ListActivity{ 
     @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
       .permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 
    try { 

     URL url = new URL(
       "http://devcms.barcodo.com/Images/ProductImages/ThumbnailImages100/EG-BIRT-ST-JA_th.jpg"); 
     HttpGet httpRequest = null; 

     httpRequest = new HttpGet(url.toURI()); 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response = (HttpResponse) httpclient 
       .execute(httpRequest); 

     HttpEntity entity = response.getEntity(); 
     BufferedHttpEntity b_entity = new BufferedHttpEntity(entity); 
     InputStream input = b_entity.getContent(); 

     bitmap = BitmapFactory.decodeStream(input); 

    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } catch (MalformedURLException e) { 
     Log.e("log", "bad url"); 
    } catch (IOException e) { 
     Log.e("log", "io error"); 
    } 
    setListAdapter(new StudentListAdapter(this)); 
} 

private class StudentListAdapter extends BaseAdapter { 
    private Context mContext; 
    private String[] mStudents = { "DurgaPrasad", "Raghu", "Vivek", 
      "Satish", "Naga Jyothi", "Vardhika", "Nikhil" }; 
    private String[] mDetailsStudent = { "Details of DurgaPrasad", 
      "Details of Raghu This row is not created using java", 
      "Details of Vivek", "Details of Satish", 
      "Details of Naga Jyothi", "Details of Vardhika", 
      "Details of Nikhil" }; 

    public StudentListAdapter(Context context) { 
     mContext = context; 
    } 

    public int getCount() { 
     return mStudents.length; 
    } 

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

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      System.out.println("111111111111 : " + position); 
      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      /* 
      * if (position == 0) { 
      * System.out.println("111111111111 : "+position); v = 
      * vi.inflate(R.layout.studentdetailsrow, null); 
      * System.out.println("111111111111 : "+position); } else 
      */ 
      v = vi.inflate(R.layout.list_item, null); 
     } 

     ImageView iv = (ImageView) v.findViewById(R.id.icon); 
     ImageView iv2 = (ImageView) v.findViewById(R.id.icon2); 
     if (position == 0) { 
      iv.setImageBitmap(bitmap); 
      // iv2.setImageResource(R.drawable.icon); 
     } else { 
      iv.setImageBitmap(bitmap); 
      // iv2.setImageResource(R.drawable.icon); 
     } 

     TextView tvname = (TextView) v.findViewById(R.id.stuname); 
     TextView tvdetail = (TextView) v.findViewById(R.id.studetail); 
     tvname.setText(mStudents[position]); 
     tvdetail.setText(mDetailsStudent[position]); 
     return v; 
    } 

    }; 
     } 
+1

非常感谢..它的工作原理 –

+0

如果我们有图像的URL,我们如何能够在列表视图中显示它们的阵列? – user1788736

1

试试这个图书馆,是否正是你所需要的。 https://github.com/thest1/LazyList

要在列表视图显示图像,你需要创建一个从BaseAdapter延伸的列表适配器类,并创建每个视图那里。

+0

非常感谢的链接..它帮了我很多理解的概念 –

1

Hello Guys

我一直在寻找厚,薄,和我有实现与simpleadapter一个ListView的一些问题。然后@AYorhan说使用baseadapter并提供了帮助我解决我的问题的很多链接。然后@Ramesh为我提供了一个帮助我很多的例子。

我想创建我自己的列表适配器使用simpleadapter显示在listView但没有得到成功之后,我用BaseAdapter,与多个项目从服务器使用JSON URL获取。我获得了成功。

我在android中分享一些初学者的工作代码链接,可能他们会从服务器获取图像并使用baseadpater获取到listview中。

问候:::: TechEnd官方

0

获取从JSON数据图像到ListView控件在列表中选择所有的数据移动到第二活动名称SingleContactActivity

ListView list; 

ArrayList<FeeStacture> newsFeedList; 
DeliveryListAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    initializeAdress(); 


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


      // getting values from selected ListItem 
      String name = ((TextView) view.findViewById(R.id.rank)) 
        .getText().toString(); 
      String cost = ((TextView) view.findViewById(R.id.country)) 
        .getText().toString(); 
      String description = ((TextView) view.findViewById(R.id.population)).getText().toString(); 

      ImageView employee_id = ((ImageView) view.findViewById(R.id.imagestar)); 
      employee_id.buildDrawingCache(); 
      Bitmap bitmap=employee_id.getDrawingCache(); 





      Intent in = new Intent(getApplicationContext(), 
        SingleContactActivity.class); 
      in.putExtra("name", name); 
      in.putExtra("email", cost); 
      in.putExtra("phone", description); 

      in.putExtra("BitmapImage", bitmap); 


      startActivity(in); 
     } 
    }); 

} 


private void initializeAdress() { 
    getNewsFeedListFromServer(); 

    newsFeedList = new ArrayList<FeeStacture>(); 
} 


private void getNewsFeedListFromServer() { 

    Fee_Stacture_WebService servics = new Fee_Stacture_WebService(this); 
    servics.startTask(); 
} 

public class DeliveryListAdapter extends BaseAdapter 

{ 

    LayoutInflater minflat; 

    public DeliveryListAdapter() { 
     minflat = LayoutInflater.from(getApplicationContext()); 
    } 

    @Override 
    public int getCount() { 
     return newsFeedList.size(); 
     //return MainActivity.size(); 
    } 

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

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


    @Override 
    public View getView(int position, View contentView, ViewGroup arg2) { 

     ViewHolder holder; 

     if (contentView == null) { 
      holder = new ViewHolder(); 

      contentView = minflat.inflate(R.layout.home_custom_listitem, null); 


      holder.rank = (TextView) contentView.findViewById(R.id.rank); 
      holder.pop = (TextView) contentView.findViewById(R.id.population); 
      holder.country = (TextView) contentView.findViewById(R.id.country); 
      holder.image = (ImageView) contentView.findViewById(R.id.imagestar); 

      contentView.setTag(holder); 

     } else 
     { 
      holder = (ViewHolder) contentView.getTag(); 

     } 

     FeeStacture newsObj = newsFeedList.get(position); 



     holder.rank.setText(newsObj.getRank()); 
     holder.pop.setText(newsObj.getPop()); 

     holder.country.setText(newsObj.getCountry()); 
     new DownloadImageTask(holder.image).execute(newsFeedList.get(position).getItemIconStr()); 

     return contentView; 


    } 


    public class ViewHolder { 
     // ImageView use; 
     TextView rank; 
     TextView pop; 
     ImageView image; 
     TextView address; 
     TextView country; 
     TextView gender; 
     TextView phone; 
    } 

} 

@Override 
public void onSuccessfullResponse(Object object) { 
    newsFeedList = (ArrayList<FeeStacture>) object; 

    adapter.notifyDataSetChanged(); 

} 

@Override 
public void onErrorResponse(String error) { 
    Toast.makeText(getApplicationContext(), error, Toast.LENGTH_SHORT).show(); 

} 

@Override 
public void onNetworkError(String error) { 
    Toast.makeText(getApplicationContext(), error, Toast.LENGTH_SHORT).show(); 

} 


@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    //super.onBackPressed(); 
    new AlertDialog.Builder(this) 
      .setIcon(android.R.drawable.ic_menu_zoom) 
      .setTitle("Web Service Demo") 
      .setMessage("Are you sure you want to quit Web Demo ?") 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        finish(); 

       } 

      }) 
      .setNegativeButton("No", null) 
      .show(); 
} 



private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    ImageView bmImage; 

    public DownloadImageTask(ImageView bmImage) { 
     this.bmImage = bmImage; 
    } 

    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     Bitmap mIcon11 = null; 
     try { 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      mIcon11 = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return mIcon11; 
    } 

    protected void onPostExecute(Bitmap result) { 
     bmImage.setImageBitmap(result); 
    } 

} 

}