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

代码如下:

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>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值