xUtils和FastJson获取和解析网络数据
来源:互联网 发布:孙悟空直销软件 编辑:程序博客网 时间:2024/06/10 05:20
FastJson解析Json数据
发送一个异步请求
发送一个同步请求
上传文件
发送一个异步任务就系Json数据
首先打开一个接口,里面是Json数据,通过xUtils框架来发送get请求,得到接口的Json字符串,将字符串用FastJson解析成一个实体类,保存在集合当中
在Gradle里面添加库工程
xUtils框架:compile ‘org.xutils:xutils:3.3.40’
FastJson:compile ‘com.alibaba:fastjson:1.1.56.android’
(我也不知道为什么显示出来的android是红色大写,应当是android)
实体类(VO类)的实现
首先我们要有一个可以打开的接口:
http://103.244.59.105:8014/paopaoserver/articles?params={“page”:1,”page_count”:10}
内容:
分析他的结构创建一个日常用品的Vo类,一般名字和id都是比较重要的
private String classify_name; private int classify_id; public int getClassify_id() { return classify_id; } public void setClassify_id(int classify_id) { this.classify_id = classify_id; } public String getClassify_name() { return classify_name; } public void setClassify_name(String classify_name) { this.classify_name = classify_name; }
Vo类的属性和Json数据里面的属性名字要一样,这样才能正确解析
有了一个Vo实体类之后我们就可以对Json进行映射
创建一个解析器
创建一个解析器,在整个工程里面可以都是用一个解析器进行数据解析
//创建一个解析器是实现ResponseParser 接口public class JsonRespondParse implements ResponseParser { @Override public void checkResponse(UriRequest request) throws Throwable { }//重写解析Json数据的方法 @Override public Object parse(Type resultType, Class<?> resultClass, String result) throws Throwable { //判断整个数据是不是由一个List包裹起来的 if (resultClass == List.class) { //将List解析成一个个小的对象(List的名字叫datas) result = JSON.parseObject(result).getString("datas"); //解析成小的vo对象 return JSON.parseArray(result, (Class<?>) ParameterizedTypeUtil.getParameterizedType(resultType, List.class, 0)); } else { //如果不是用List组成的则直接将Json进行解析成vo实体类 return JSON.parseObject(result, resultClass); } }}
将解析器当成vo类的注解
在Vo类的最上方添加 的注解
@HttpResponse(parser = JsonRespondParse.class)
这样Json数据可以直接映射成Vo对象,并将这个对象放到List集合当中
Vo类全部代码:
@HttpResponse(parser = JsonRespondParse.class)public class DayGoodsVo { private String classify_name; private int classify_id; public int getClassify_id() { return classify_id; } public void setClassify_id(int classify_id) { this.classify_id = classify_id; } public String getClassify_name() { return classify_name; } public void setClassify_name(String classify_name) { this.classify_name = classify_name; } @Override public String toString() { return classify_name; }}
得到Json数据
接下来就要得到Json数据了,只有拿到Json数据的字符串才能对它进行解析
这里要用到xUtils框架发送一个get请求来得到数据,xUtils框架的使用在这里就不进行介绍了
首先需要将接口拼接出来
//接口url RequestParams requestParams = new RequestParams ("http://103.244.59.105:8014/paopaoserver/articles"); //拼接接口(参数名,参数) requestParams.addQueryStringParameter("params", "{\"page\":1,\"page_count\":10}");
这样完整的url就拼接好了
发送一个get请求,得到数据,并对数据进行解析
//用x.http().get发送一个get请求(url,得到返回数据并进行操作) x.http().get(requestParams, new Callback.CacheCallback<List<DayGoodsVo>>() { //得到返回数据会重写五个方法 @Override public void onSuccess(List<DayGoodsVo> result) { //返回成功时可以直接得到List集合 //如果是String.class得到的就是String字符串 for (DayGoodsVo dayGoods : result) { Log.e("tag", dayGoods.toString()); mList.add(dayGoods); } //将解析的数据放到适配器中,在ListView中进行显示 mListView.setAdapter(new DayBaseAdapter(DayGoodsActivity.this, mList)); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } @Override public boolean onCache(List<DayGoodsVo> result) { return false; } }); }
x.http()里面包含着子线程,所以不用再单独开启一个子线程去实现网路请求,而且数据显示在ListView中也直接在onSuccess()中实现
下面是完整的代码
private void getHttpData() { RequestParams requestParams = new RequestParams ("http://103.244.59.105:8014/paopaoserver/articles"); requestParams.addQueryStringParameter("params", "{\"page\":1,\"page_count\":10}"); x.http().get(requestParams, new Callback.CacheCallback<List<DayGoodsVo>>() { @Override public void onSuccess(List<DayGoodsVo> result) { for (DayGoodsVo dayGoods : result) { Log.e("tag", dayGoods.toString()); mList.add(dayGoods); } mListView.setAdapter(new DayBaseAdapter(DayGoodsActivity.this, mList)); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } @Override public boolean onCache(List<DayGoodsVo> result) { return false; } }); }
这样就实现了通过一个异步任务,将Json数据直接解析成一个Vo实体类
发送一个同步任务
//同步线程中去访问网路,必须要在子线程中 public void httpGetSync() { new Thread(new Runnable() { @Override public void run() { RequestParams requestParams = new RequestParams(urlJson); //添加一个请求,获取信息 //键值对的形式来把请求参数进行一个封装 requestParams.addQueryStringParameter("sex", "girl"); try { String result = x.http().getSync(requestParams, String.class); Log.d("TAG", "result:" + result); } catch (Throwable throwable) { throwable.printStackTrace(); } } }).start(); }
这样的方法得到的是String字符串,也可以用上面直接解析到list中
上传文件
//上传文件 private void upload() { //上传文件的网址 RequestParams requestParams = new RequestParams(fileUrl); //模仿一个表单,模拟上传一个文件 //上传的是一个表单,而且可以上传文件 requestParams.setMultipart(true); //上传文件(给文件定义一个名字file,head,上传的文件或者头像) requestParams.addBodyParameter("file", new File(filePath)); //发送上传的请求,Get请求不能上传表单请求,要用Post请求 x.http().post(requestParams, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Log.d("TAG", "uoload success"); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); }
- xUtils和FastJson获取和解析网络数据
- xutils网络数据请求,fastjson解析数据
- 使用fastjson和xUtils框架来获取聚合笑话数据
- xutils解析网络数据
- xutils和Gson解析Json数据
- 网络请求数据之XUtils和Volley
- fastjson生成和解析json数据
- FastJson生成和解析JSON数据
- fastjson生成和解析json数据
- FastJson生成和解析JSON数据
- fastjson生成和解析json数据
- fastjson生成和解析json数据
- fastjson生成和解析json数据
- FastJson生成和解析JSON数据
- Java构造和解析Json数据-fastjson
- FastJson和Gson和Json数据解析分析和用法
- Android关于网络获取数据和解析数据
- xutils获取动态图片和进度条对话框gson解析字符串
- linux服务器如何检查远程用户登陆状态、时间、ip地址等信息
- ionic Popup(弹窗)
- oracle 统计当年和当月数据
- IOS 后台运行定位介绍及解决办法
- arcgis for ios 去掉地图上的开发英文
- xUtils和FastJson获取和解析网络数据
- 哈夫曼树
- Java入门——方法
- 装饰者模式
- 「小程序」开发 指南(里面是小程序开发的各种论坛和文档)
- java定时器的几种用法
- 学习知识的小技巧
- SimpleDateFormat
- access函数