代码如下:
package com.example.test4_listview;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView listView;
private static MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView) findViewById(R.id.list_view);
new MyAsycnTask(this).execute("http://api.1ccf.com/cook/list");
adapter=new MyAdapter(this);
listView.setAdapter(adapter);
}
private static class MyAsycnTask extends AsyncTask<String, Void, List<MyData>>{
private ProgressDialog dialog;
private Context context;
public MyAsycnTask(Context context) {
this.context=context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog=new ProgressDialog(context);
dialog.setTitle("加载");
dialog.setIcon(R.drawable.ic_launcher);
dialog.setMessage("正在加载中");
}
@Override
protected List<MyData> doInBackground(String... arg0) {
InputStream in=null;
ByteArrayOutputStream baos=null;
try {
URL url=new URL(arg0[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
if (200==conn.getResponseCode()) {
in = conn.getInputStream();
baos=new ByteArrayOutputStream();
int len=-1;
byte[] by=new byte[1024];
while((len=in.read(by))!=-1){
baos.write(by, 0, len);
}
baos.flush();
byte[] array = baos.toByteArray();
String str = new String(array,0,array.length);
Log.v("MainActivity", str);
JSONObject object=JSONObject.parseObject(str);
JSONArray jsonArray = object.getJSONArray("yi18");
List<MyData> list = JSONArray.parseArray(jsonArray.toString(), MyData.class);
return list;
}
return null;
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if (null!=in) {
in.close();
}
if (null!=baos) {
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(List<MyData> result) {
super.onPostExecute(result);
adapter.addData(result);
dialog.dismiss();
}
}
}
package com.example.test4_listview;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter{
private Context context;
private List<MyData> list=new ArrayList<MyData>();
private LayoutInflater inflater;
public MyAdapter(Context context) {
this.context=context;
inflater=inflater.from(context);
}
public void MyAdapter(Context context,List<MyData> result) {
this.context=context;
this.list=result;
inflater=inflater.from(context);
}
/**
* 添加数据
* @param result
*/
public void addData(List<MyData> result) {
this.list.addAll(result);
notifyDataSetChanged();//通知适配器数据发送改变
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int arg0) {
return list.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ViewHolder holder=null;
if (arg1==null) {
holder=new ViewHolder();
arg1=inflater.inflate(R.layout.list_item_layout, null);
holder.imageView=(ImageView) arg1.findViewById(R.id.image);
holder.textView=(TextView) arg1.findViewById(R.id.text_view);
arg1.setTag(holder);
}else {
holder=(ViewHolder) arg1.getTag();
}
MyData data = list.get(arg0);
holder.imageView.setTag("http://www.yi18.net/"+data.getImg());
holder.textView.setText(data.getTag());
new ImageAsyncTask(holder.imageView).execute("http://www.yi18.net/"+data.getImg());
return arg1;
}
static class ViewHolder{
ImageView imageView;
TextView textView;
}
static class ImageAsyncTask extends AsyncTask<String, Void, Bitmap>{
private String param="";
private ImageView imageView;
public ImageAsyncTask(ImageView imageView) {
this.imageView=imageView;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Bitmap doInBackground(String... arg0) {
InputStream in=null;
ByteArrayOutputStream baos=null;
param=arg0[0];
try {
URL url=new URL(param);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
if (conn.getResponseCode()==200) {
in = conn.getInputStream();
baos=new ByteArrayOutputStream();
int len=-1;
byte[] by=new byte[1024];
while ((len=in.read(by))!=-1) {
baos.write(by, 0, len);
}
baos.flush();
byte[] array = baos.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(array, 0, array.length);
return bitmap;
}
return null;
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if (null!=in) {
in.close();
}
if (null!=baos) {
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Bitmap result) {
if (null!=result) {
if (param.equals(imageView.getTag())) {
imageView.setImageBitmap(result);
}
}
super.onPostExecute(result);
}
}
}
package com.example.test4_listview;
public class MyData {
private String name;
private String img;
private String tag;
private String food;
private String count;
private String fcount;
private String rcount;
private String id;
public MyData() {
super();
// TODO Auto-generated constructor stub
}
public MyData(String name, String img, String tag, String food,
String count, String fcount, String rcount, String id) {
super();
this.name = name;
this.img = img;
this.tag = tag;
this.food = food;
this.count = count;
this.fcount = fcount;
this.rcount = rcount;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public String getFcount() {
return fcount;
}
public void setFcount(String fcount) {
this.fcount = fcount;
}
public String getRcount() {
return rcount;
}
public void setRcount(String rcount) {
this.rcount = rcount;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "MyData [name=" + name + ", img=" + img + ", tag=" + tag
+ ", food=" + food + ", count=" + count + ", fcount=" + fcount
+ ", rcount=" + rcount + ", id=" + id + "]";
}
}
布局文件:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.test4_listview.MainActivity" >
<ListView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/list_view" />
</RelativeLayout>
自定义的布局文件:list_item_layout.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="350dp"
android:orientation="vertical">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="350dp"
android:scaleType="centerCrop"
android:src="@drawable/ic_launcher"/>
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:textColor="#000" />
</LinearLayout>