您的位置:首页 > 理论基础 > 计算机网络

使用ListView和AsyncTask、fastjson解析Json以及适配器BaseAdapter来实现下载网络的图片以及文字并显示出来

2015-09-15 09:18 956 查看
代码如下:

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息