发送一个北京-赛车平台出租异步任务就系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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Vo类的属性和Json数据里面的属性名字要一样,这样才能正确解析
有了一个Vo实体类之后我们就可以对Json进行映射
创建一个解析器
创建一个解析器,在整个工程里面可以都是用一个解析器进行数据解析
//创建一个解析器是实现ResponseParser 接口
public class JsonRespondParse implements ResponseParser {br/>@Override
public void checkResponse(UriRequest request) throws Throwable {
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
将解析器当成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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
得到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}");
1
2
3
4
5
1
2
3
4
5
这样完整的url就拼接好了
发送一个get请求,得到数据,并对数据进行解析
//用x.http().get发送一个get请求(url,得到返回数据并进行操作)
x.http().get(requestParams, new Callback.CacheCallback<List<DayGoodsVo>>() {br/>//得到返回数据会重写五个方法
@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;
}
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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>>() {br/>@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;
}
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
这样就实现了通过一个异步任务,将Json数据直接解析成一个Vo实体类
发送一个同步任务
//同步线程中去访问网路,必须要在子线程中
public void httpGetSync() {
new Thread(new Runnable() {br/>@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();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
这样的方法得到的是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>() {br/>@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获取和北京-赛车平台出租解析网络数据
原文地址:http://blog.51cto.com/13874207/2145706