结果如图:
注意:加网络权限
逻辑代码文件:
<span style="font-size:18px;">package com.example.day18_work;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ListView;
public class MainActivity extends Activity {
ListView lv;
MyAdapter adapter;
ProgressDialog pdialog;
String uriImg="http://litchiapi.jstv.com/Attachs/Article/148548/f7ed8c7af5ab46339972aa592e060e32_padmini.JPG";
String path="http://litchiapi.jstv.com/api/GetFeeds?column=0&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41";
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
List<Map<String,Object>> list = (List<Map<String, Object>>) msg.obj;
adapter=new MyAdapter(MainActivity.this, list);
lv.setAdapter(adapter);
pdialog.dismiss();
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView) findViewById(R.id.lv);
pdialog=new ProgressDialog(MainActivity.this);
pdialog.setMessage("正在加载");
getData();
}
public void getData()
{
pdialog.show();
new Thread(){
public void run() {
String data=RequestData.request(path);
List<Map<String,Object>> list=ParserData.parser(data);
Message msg=handler.obtainMessage();
msg.obj=list;
handler.sendMessage(msg);
};
}.start();
}
}
</span>
主布局文件:
<span style="font-size:18px;"><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=".MainActivity" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
</span>
请求网络工具类:
<span style="font-size:18px;">package com.example.day18_work;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class RequestData {
public static String request(String path)
{
ByteArrayOutputStream bo=new ByteArrayOutputStream();
try
{
URL url=new URL(path);
HttpURLConnection con=(HttpURLConnection) url.openConnection();
con.setConnectTimeout(5000);
con.setDoInput(true);
con.connect();
if(con.getResponseCode()==200)
{
InputStream in = con.getInputStream();
byte b[]=new byte[1024];
int count=0;
while((count=in.read(b))!=-1)
{
bo.write(b, 0, count);
bo.flush();
}
}
return bo.toString();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public static byte[] getPic(String path)
{
ByteArrayOutputStream bo=new ByteArrayOutputStream();
try
{
URL url=new URL(path);
HttpURLConnection con=(HttpURLConnection) url.openConnection();
con.setConnectTimeout(5000);
con.setDoInput(true);
con.connect();
if(con.getResponseCode()==200)
{
InputStream in = con.getInputStream();
byte b[]=new byte[1024];
int count=0;
while((count=in.read(b))!=-1)
{
bo.write(b,0,count);
bo.flush();
}
}
return bo.toByteArray();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
</span>
解析数据(标题,内容)工具类:
<span style="font-size:18px;">package com.example.day18_work;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
public class ParserData {
static List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
static String img="http://litchiapi.jstv.com";
public static List<Map<String,Object>> parser(String data)
{
try
{
JSONObject jo=new JSONObject(data);
JSONObject jo2=jo.getJSONObject("paramz");
JSONArray ja= jo2.getJSONArray("feeds");
for (int i = 0; i < ja.length(); i++) {
Map<String,Object> map=new HashMap<String, Object>();
JSONObject text = ja.getJSONObject(i);
JSONObject ja2 = text.getJSONObject("data");
String title = ja2.getString("subject");
String content=ja2.getString("summary");
String uri=ja2.getString("cover");
map.put("title", title);
map.put("content", content);
map.put("imgPath", img+uri);
list.add(map);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return list;
}
}
</span>
下载图片的异步任务类:
<span style="font-size:18px;">package com.example.day18_work;
import java.util.Map;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
public class AsyncTaskPic extends AsyncTask<String, Void, Bitmap>{
Context context;
ImageView iv;
Map<String,Bitmap> imgCache;
String imgUri;
public AsyncTaskPic(Context context, ImageView iv,Map<String,Bitmap> imgCache) {
super();
this.context = context;
this.iv = iv;
this.imgCache=imgCache;
}
@Override
protected Bitmap doInBackground(String... params) {
imgUri=params[0];
byte b[]=RequestData.getPic(params[0]);
Bitmap bm = null;
if(b!=null&&b.length>0)
{
bm=BitmapFactory.decodeByteArray(b, 0, b.length);
}
return bm;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
//将下载的图片和地址分别作为值和键存在缓存区
imgCache.put(imgUri, result);
if(imgUri.equals(iv.getTag()))
{
iv.setImageBitmap(result);
}
}
}
</span>
自定义适配器类:
<span style="font-size:18px;">package com.example.day18_work;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MyAdapter extends BaseAdapter{
Context context;
List<Map<String,Object>> list;
//缓存图片
Map<String,Bitmap> imgCache=new HashMap<String, Bitmap>();
public MyAdapter(Context context, List<Map<String, Object>> list) {
super();
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder=null;
if(view==null)
{
view=LayoutInflater.from(context).inflate(R.layout.item, null);
holder=new ViewHolder();
holder.iv=(ImageView) view.findViewById(R.id.iv);
holder.title=(TextView) view.findViewById(R.id.tv_title);
holder.content=(TextView) view.findViewById(R.id.tv_content);
view.setTag(holder);
}
else
{
holder=(ViewHolder) view.getTag();
}
String title=list.get(position).get("title").toString();
String content=list.get(position).get("content").toString();
holder.title.setText(title);
holder.content.setText(content);
String imgPath=list.get(position).get("imgPath").toString();
//为解决图片移位设默认图片
holder.iv.setImageResource(R.drawable.ic_launcher);
holder.iv.setTag(imgPath);
//若图片缓存区不存在图片地址去下载
if(!imgCache.containsKey(imgPath))
{
AsyncTaskPic taskPic=new AsyncTaskPic(context, holder.iv,imgCache);
taskPic.execute(imgPath);
}
else
{
//图片缓存区中地址(键)对应的图片取出来放在iv上
holder.iv.setImageBitmap(imgCache.get(imgPath));
}
return view;
}
class ViewHolder
{
ImageView iv;
TextView title;
TextView content;
}
}
</span>
自定义适配器的样式布局文件:
<span style="font-size:18px;"><?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="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv"
android:layout_width="100dp"
android:layout_height="100dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textColor="#0000ff"/>
<TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textColor="#00ff00"/>
</LinearLayout>
</LinearLayout>
</span>