xUtils與FastJson獲取和北京-賽車平臺出租解析網絡數據
首先打開一個接口,裏面是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 {@Override
br/>@Override
}
//重寫解析Json數據的方法@Override
br/>@Override
//判斷整個數據是不是由一個List包裹起來的
if (resultClass == List.class) {
//將List解析成一個個小的對象(List的名字叫datas)
//解析成小的vo對象
return JSON.parseArray(result, (Class<?>) ParameterizedTypeUtil.getParameterizedType(resultType, List.class, 0));
} else { //如果不是用List組成的則直接將Json進行解析成vo實體類
return JSON.parseObject(result, resultClass);
}
}
}
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>>() {//得到返回數據會重寫五個方法
@Override
br/>//得到返回數據會重寫五個方法
@Override
//返回成功時可以直接得到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>>() {@Override
br/>@Override
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() {@Override
br/>@Override
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>() {@Override
br/>@Override
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獲取和北京-賽車平臺出租解析網絡數據