请求Tomcat获得资源,获取后进行解析并显示:
- 掌握开源项目AsycHttpClient的使用
- 掌握如何进行JSON解析
主要代码
MainActivity.java :
public class MainActivity extends Activity {
ListView lv_news;
LinearLayout Loading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_news=(ListView)findViewById(R.id.lv_news);
Loading=(LinearLayout)findViewById(R.id.loading);
fillData3();
}
private void fillData3(){
AsyncHttpClient asynchttpClient =new AsyncHttpClient();
//服务器地址及端口 http://10.3.24.107:8080
//本地测试用自己的ip
asynchttpClient.get("http://10.3.24.107:8080/NewsInfo.json",new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int i, org.apache.http.Header[] headers, byte[] bytes) {
try {
String json =new String (bytes ,"utf-8");
List<newsInfo> newsInfos = JsonParse.getNewsInfo(json);
if (newsInfos==null){
Toast.makeText(MainActivity.this,"解析失败!",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this,"获取成功!",Toast.LENGTH_SHORT).show();
Loading.setVisibility(View.INVISIBLE);
lv_news.setAdapter(new newsAdapter(MainActivity.this,newsInfos));
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int i, org.apache.http.Header[] headers, byte[] bytes, Throwable throwable) {
Toast.makeText(getApplication(),"获取失败",Toast.LENGTH_SHORT).show();
//System.out.println(">>>>>>>>>获取失败!");
}
});
}
}
解析工具类JsonParse .java (需要导入Google的Gson ):
public class JsonParse {
public static List<newsInfo> getNewsInfo(String json){
Gson gson =new Gson();
Type listType = new TypeToken<List<newsInfo>>(){
}.getType();
List<newsInfo> newsInfos = gson.fromJson(json,listType);
return newsInfos;
}
}
适配器newsAdapter .java :
public class newsAdapter extends ArrayAdapter<newsInfo>{
public newsAdapter(Context context, List<newsInfo> objects) {
super(context, R.layout.news_item , objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
newsInfo news= getItem(position);
View view;
ViewHolder viewHolder;
if (convertView == null) {
//任务 补充完整
view = LayoutInflater.from(getContext()).inflate(R.layout.news_item, null);
viewHolder = new ViewHolder();
//获取控件
viewHolder.siv = (SmartImageView) view.findViewById(R.id.siv_icon);
viewHolder.tvtitle = (TextView) view.findViewById(R.id.tv_title);
viewHolder.tvdescription = (TextView) view.findViewById(R.id.tv_description);
viewHolder.tvtype = (TextView) view.findViewById(R.id.tv_type);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.siv.setImageUrl(news.getIcon());
viewHolder.tvtitle.setText(news.getTitle());
viewHolder.tvdescription.setText(news.getContent());
viewHolder.tvtype.setText(news.getType()+"");
return view;
}
class ViewHolder {
SmartImageView siv;
TextView tvtitle;
TextView tvdescription;
TextView tvtype;
}
}
进行到这里就已经差不多了。我们只需要在开启Tomcat ,把Json文件放到..\Tomcat 9.0\webapps\ROOT。下就OK了。
当我们运行Main时就会执行asynchttpClient.get();其中的第一个参数就是我们的请求地址。地址正确请求文件存在我们就会得到相应文件。然后进行解析就OK;
运行效果: