实验目的:
1. 掌握开源项目AsycHttpClient的使用
2.掌握如何进行JSON解析
实验准备:
1.下载所需要的jar包(下面会说到需要哪些jar包)
2.安装Tomcat服务器
实验效果图:
实验过程:
1.为了方便后边导入包顺利,首先把需要的jar包导入:
提供一个网址:https://github.com点击打开链接(里边可以找到所有开源项目你需要的包)
本案例需要的jar包: (1)async-http:点击打开链接
(2)smart-image-view:点击打开链接
(3)httpcore
把jar包放到project/New/app/libs下
还需要右键点击jar包—Add As Library...—ok
如下图所示:
2.创建一个名为“新闻客户端”的应用程序,设计用户交互界面,效果图如下所示:
程序对应的布局文件(activity_main.xml)详细代码如下:
3.创建ListView Item的布局
由于使用到了ListView控件,因此需要为ListView的item创建一个布局。ListView Item 布局的图形化界面如下图所示:
ListView的Item布局文件news_item.xml详细代码如下所示:
5.创建NewsInfo类
具体代码如下:
public class NewsInfo {
private String icon;
private String title;
private String description;
private int type;
private long comment;
public NewsInfo(String icon, String title, String description, int type, long comment) {
this.icon = icon;
this.title = title;
this.description = description;
this.type = type;
this.comment = comment;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public long getComment() {
return comment;
}
public void setComment(long comment) {
this.comment = comment;
}
}
6.创建NewsAdapter类
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.loopj.android.image.SmartImageView;
import java.util.List;
import cn.edu.bzu.anew.R;
import cn.edu.bzu.anew.entity.NewsInfo;
public class NewsAdapter extends ArrayAdapter
{
public NewsAdapter(Context context, List
objects) {
super(context, R.layout.news_item, objects);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
NewsInfo newsinfo= getItem(position);//传递position,获取当前位置对应的newsinfo新闻信息
View view=null;
viewHolder viewHolder;
if(convertView==null){ //判断convertView中是否加载了布局,有没有缓存。为空说明没有缓存
view=LayoutInflater.from(getContext()).inflate(R.layout.news_item,null);
viewHolder=new viewHolder();
viewHolder.siv= (SmartImageView) view.findViewById(R.id.siv_icon);
viewHolder.tv_title= (TextView) view.findViewById(R.id.tv_title);
viewHolder.tv_description= (TextView) view.findViewById(R.id.tv_description);
viewHolder.tv_type= (TextView) view.findViewById(R.id.tv_type);
view.setTag(viewHolder); //保存
}else{
view=convertView;
viewHolder=(viewHolder) view.getTag();
}
viewHolder.siv.setImageUrl(newsinfo.getIcon());
viewHolder.tv_title.setText(newsinfo.getTitle());//传递题目
viewHolder.tv_description.setText(newsinfo.getDescription());
viewHolder.tv_type.setText(newsinfo.getType()+"");
return view;
}
class viewHolder{//添加类,封装需要查找的控件
TextView tv_title;
TextView tv_description;
TextView tv_type;
SmartImageView siv;
}
}
7.创建JsonParse类
具体代码如下:
public class JsonParse {
public static List
getNewsInfo(String json){
Gson gson =new Gson();
Type listType=new TypeToken
> (){
}.getType();
List
newsInfos=gson.fromJson(json,listType);
return newsInfos;
}
8.添加权限
本案例需要访问网络因此需要在AndroidMainfest.xml里面配置相应的权限。
具体如下所示:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>