此篇博客通过模拟连接MyEclipse搭建的服务器下载图片,实现在实际开发中的场景运用。
MainActivity的代码
package com.example.e13_listview3; import java.util.HashMap; import java.util.List; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { private ListView listView; private MyAdapter adapter; private ProgressDialog dialog; //创建一个进度条 private byte[] data; private final static String PATH = "http://111.0.166.84:8080/http/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) this.findViewById(R.id.listView1); adapter = new MyAdapter(); dialog = new ProgressDialog(MainActivity.this); dialog.setTitle("正在下载"); dialog.setMessage("客官,请稍后....."); new MyTask().execute(PATH); } class MyTask extends AsyncTask<String, Void, List<HashMap<String, Object>>> { private List<HashMap<String, Object>> list; @Override protected void onPreExecute() { // TODO Auto-generated method stub dialog.show(); super.onPreExecute(); } @Override protected List<HashMap<String, Object>> doInBackground(String... params) { // TODO Auto-generated method stub //通过异步任务下载图片 list = CitySource.getList(); String name = (String) list.get(0).get("view"); data = HttpUtils.sendPostMethod(params[0] + name + ".jpg"); Log.i("info", "--------->" + PATH + name + ".jpg"); return list; } @Override protected void onPostExecute(List<HashMap<String, Object>> result) { // TODO Auto-generated method stub adapter.setList(result); //如果数据有更新,该方法会自动更新listview adapter.notifyDataSetChanged(); listView.setAdapter(adapter); dialog.dismiss(); super.onPostExecute(result); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public class MyAdapter extends BaseAdapter { private List<HashMap<String, Object>> list; public List<HashMap<String, Object>> getList() { return list; } public void setList(List<HashMap<String, Object>> list) { this.list = list; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return list.get(arg0); } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView(int position, View convertView, ViewGroup viewGroup) { // TODO Auto-generated method stub View view = null; if (convertView == null) { //填充布局文件,仅在第一次启动的时候系统会调用该方法 view = LayoutInflater.from(MainActivity.this).inflate( R.layout.item_list, null); } else { view = convertView; } Log.i("info", "-------->"+view); TextView text = (TextView) view.findViewById(R.id.textView1); ImageView imageView = (ImageView) view .findViewById(R.id.imageView1); text.setText((CharSequence) list.get(position).get("name")); Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); imageView.setImageBitmap(bm); return view; } } }
HttpUtiles获得网络连接
package com.example.e13_listview3; import java.io.IOException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; public class HttpUtils { public static byte[] sendPostMethod(String url){ byte[] result=null; HttpPost httpPost=new HttpPost(url); HttpClient client=new DefaultHttpClient(); try { HttpResponse httpResponse=client.execute(httpPost); result=EntityUtils.toByteArray(httpResponse.getEntity()); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } }
CitySource模拟远程服务器的列表数据
package com.example.e13_listview3; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class CitySource { public static List<HashMap<String, Object>> getList(){ List<HashMap<String, Object>> list=new ArrayList<HashMap<String,Object>>(); HashMap<String, Object> map=new HashMap<String, Object>(); map.put("name", "杭州"); map.put("view", "hangzhou"); HashMap<String, Object> map1=new HashMap<String, Object>(); map1.put("name", "杭州"); map1.put("view", "hangzhou"); list.add(map); list.add(map1); return list; } }