1. 程式人生 > >xUtils與FastJson獲取和北京-賽車平臺出租解析網絡數據

xUtils與FastJson獲取和北京-賽車平臺出租解析網絡數據

ase fin stp onfinish 9.1 同步 rri req his

發送一個北京-賽車平臺出租異步任務就系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 {@Override
br/>@Override

}

//重寫解析Json數據的方法@Override
br/>@Override
//判斷整個數據是不是由一個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);
}

}

}

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獲取和北京-賽車平臺出租解析網絡數據