1.首先搭建服務器端。html
使用MyEclipse開發工具android
public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ArrayList<Food> food = new ArrayList<Food>(); Gson g = new Gson(); Food f1 = new Food(1,"1111","1111","/cinema_1.jpg"); Food f2 = new Food(2,"2222","22222","/cinema_2.jpg"); Food f3 = new Food(3,"3333","33333","/food_1.jpg"); Food f4 = new Food(4,"44444","4444","/food_2.jpg"); Food f5 = new Food(5,"55555","5555","/hotel_1.jpg"); food.add(f1); food.add(f2); food.add(f3); food.add(f4); food.add(f5); boolean isNextPage = false; Map<String,Object> map = new HashMap<String,Object>(); map.put("foodList", food); map.put("isNextPage", isNextPage); resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); out.print(g.toJson(map)); out.close(); } }
上述代碼所需的Food實體以下:json
public class Food implements Serializable{ private int id; private String name; private String desc; private String imgPath; public Food(int id, String name, String desc, String imgPath) { super(); this.id = id; this.name = name; this.desc = desc; this.imgPath = imgPath; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getImgPath() { return imgPath; } public void setImgPath(String imgPath) { this.imgPath = imgPath; } }
咱們在瀏覽器中訪問瀏覽器
能夠獲取到結果,說明服務器端是正常的。服務器
2.服務器端搭建好了以後,咱們搭建android端ide
public class MainActivity extends Activity { private ListView lv; private List<Food> data = new ArrayList<Food>(); private MyAdapter mAdapter; private ProgressDialog pd; private boolean isNextPage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); pd = new ProgressDialog(this); mAdapter = new MyAdapter(this, data); lv.setAdapter(mAdapter); new MyFoodTask().execute(); } private class MyFoodTask extends AsyncTask<String, Void, Map<String,Object>>{ @Override protected void onPreExecute() { pd.setMessage("Loading..."); } @Override protected Map<String, Object> doInBackground(String... params) { String path = "http://10.0.2.2:8080/TestWeb/bbb"; HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(path); try { HttpResponse resp = client.execute(get); if(resp.getStatusLine().getStatusCode()==200){ HttpEntity entity = resp.getEntity(); String result = EntityUtils.toString(entity); Log.i("111", "result="+result); Map<String,Object> map = parseJson(result); return map; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onPostExecute(Map<String, Object> result) { pd.dismiss(); isNextPage = (Boolean) result.get("isNextPage"); data.addAll( (List<Food>) result.get("foodList") ); mAdapter.notifyDataSetChanged(); for(int i = 0;i<data.size();i++){ Food f = data.get(i); new MyImgTask().execute(f); } } private Map<String,Object> parseJson(String json) throws Exception{ Map<String ,Object> result = new HashMap<String,Object>(); List<Food> lists = new ArrayList<Food>(); JSONObject bigObj = new JSONObject(json); result.put("isNextPage", bigObj.getBoolean("isNextPage")); JSONArray array = bigObj.getJSONArray("foodList"); Food f = null; for(int i =0 ;i<array.length();i++){ f = new Food(); JSONObject smallObj = array.getJSONObject(i); f.setId( smallObj.getInt("id") ); f.setName( smallObj.getString("name") ); f.setDesc(smallObj.getString("desc")); f.setImgPath( smallObj.getString("imgPath") ); lists.add(f); } result.put("foodList", lists); return result; } private class MyImgTask extends AsyncTask<Food, Void, Food>{ @Override protected Food doInBackground(Food... params) { Food f = params[0]; String imgPath = "http://10.0.2.2:8080/TestWeb"+f.getImgPath(); HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(imgPath); try { HttpResponse resp = client.execute(get); if(resp.getStatusLine().getStatusCode()==200){ HttpEntity entity = resp.getEntity(); byte img [] = EntityUtils.toByteArray(entity); f.setImgData(img); } } catch (Exception e) { e.printStackTrace(); } return f; } @Override protected void onPostExecute(Food result) { mAdapter.notifyDataSetChanged(); } } } }
所需的Food實體:工具
public class Food implements Serializable{ private int id; private String name; private String desc; private String imgPath; private byte imgData []; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getImgPath() { return imgPath; } public void setImgPath(String imgPath) { this.imgPath = imgPath; } public byte[] getImgData() { return imgData; } public void setImgData(byte[] imgData) { this.imgData = imgData; } }
所需的適配器:開發工具
public class MyAdapter extends BaseAdapter{ private Context context; private List<Food> data ; public MyAdapter(Context context, List<Food> data) { this.context = context; this.data = data; } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return data.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null){ convertView = LayoutInflater.from(context).inflate(R.layout.item, null); } ImageView iv_img = (ImageView) convertView.findViewById(R.id.iv_img); TextView tv_name = (TextView) convertView.findViewById(R.id.tv_name); TextView tv_desc = (TextView) convertView.findViewById(R.id.tv_desc); Food food = data.get(position); if(food.getImgData()==null){ iv_img.setImageResource(R.drawable.cinema_1); }else{ byte [] imgData = food.getImgData(); Bitmap bm = BitmapFactory.decodeByteArray(imgData, 0, imgData.length); iv_img.setImageBitmap(bm); } tv_name.setText( food.getName()); tv_desc.setText( food.getDesc()); return convertView; } }
咱們啓動模擬器,獲得運行結果:this
有興趣的同窗, 能夠嘗試本身作一下。spa