簡(jiǎn)介
鴻蒙上使用的Http網(wǎng)絡(luò)框架,里面包含純Java實(shí)現(xiàn)的HttpNet,類似okhttp使用,支持同步和異步兩種請(qǐng)求方式;還有鴻蒙版retrofit,和Android版Retrofit相似的使用,解放雙手般優(yōu)雅使用注解、自動(dòng)解析json
很遺憾,目前沒(méi)能直接發(fā)布bintray,DevEco Studio上傳bintray,gradle安裝不通過(guò),所以如果要使用,clone下來(lái),引入module即可
HttpNet基本和進(jìn)階使用方式,可以進(jìn)行合適的封裝,簡(jiǎn)化請(qǐng)求邏輯
鴻蒙開(kāi)發(fā)文檔參考:[qr23.cn/AKFP8k
]可以復(fù)制地址前往。
構(gòu)建GET請(qǐng)求:和okhttp類似
RequestParams params = new RequestParams()
.put("userName","oscer")
.put("pwd","oschina");
Request request = new Request.Builder().encode("UTF-8")
.method("GET")
.timeout(13000)
.url("http://www.oschina.net")
.build();
構(gòu)建POST請(qǐng)求:
//請(qǐng)求參數(shù)
RequestParams params = new RequestParams()
.put("userName","oscer")
.putFile("fileName","file")
.put("pwd","oschina");
//請(qǐng)求對(duì)象
Request request = new Request.Builder()
.encode("UTF-8")
.method("POST")
.params(params)
.timeout(13000)
.url("http://www.oschina.net")
.build();
POST JSON 請(qǐng)求構(gòu)建:
Request request = new Request.Builder()
.encode("UTF-8")
.method("POST")
.content(new JsonContent("json")
.timeout(13000)
.url("http://www.oschina.net")
.build();
執(zhí)行請(qǐng)求:
//構(gòu)建Http客戶端,這里可以進(jìn)行全局static final
HttpNetClient client = new HttpNetClient();
client.setProxy("192.168.1.1",80);//您也可以開(kāi)啟該客戶端全局代理
client.addInterceptor(new Interceptor() {
/* 攔截器在執(zhí)行請(qǐng)求前都會(huì)走到這一步,如果是同步的,就是當(dāng)前線程,如果是異步,就是子線程
* 因此可以在這里動(dòng)態(tài)添加全局Cookie或其它Header之類的
* 進(jìn)階使用:如果要求對(duì)所有接口Form表單進(jìn)行全局加密,也可以在這里執(zhí)行
*/
@Override
public void intercept(Request request) {
Log.e("請(qǐng)求攔截器當(dāng)前線程: " + Thread.currentThread().getName() + " -- " + request.url());
}
});
//執(zhí)行異步請(qǐng)求
client.newCall(request)
//如果采用上傳文件方式,可以在這里開(kāi)啟上傳進(jìn)度監(jiān)控
.intercept(new InterceptListener() {
@Override
public void onProgress(final int index, final long currentLength, final long totalLength) {
Log.e("當(dāng)前進(jìn)度", " -- " + ((float) currentLength / totalLength) * 100);
}
})
.execute(new Callback() {
@Override
public void onResponse(Response response) {
String body = response.getBody();//getBody()和toStream()是互斥的
InputStream is = response.toStream();//如果采用下載,可以在這里監(jiān)聽(tīng)下載進(jìn)度
}
@Override
public void onFailure(Exception e) {
Log.e("onFailure " + e.getMessage());
}
});
// 也可以在子線程中執(zhí)行同步請(qǐng)求,如果有幾個(gè)接口需要進(jìn)行順序請(qǐng)求,此方法最佳
try {
Response response = client.newCall(request).execute();
String body = response.getBody();
}catch (Exception e){
e.printStackTrace();
}
Retrofit使用方式,底層網(wǎng)絡(luò)實(shí)現(xiàn)基于前面的 HttpNetClient,基于運(yùn)行時(shí)注解添加請(qǐng)求配置,UI切換使用鴻蒙EventHandler
// 構(gòu)建請(qǐng)求java接口,采用動(dòng)態(tài)代理+注解實(shí)現(xiàn),服務(wù)器返回什么,Call< 服務(wù)器返回json對(duì)應(yīng)的Java bean >即可
public interface LoginService {
//普通POST,方法名添加請(qǐng)求方法注解POST、GET、DELETE、Header等,方法參數(shù)添加Form表單注解
@Headers({"Cookie:cid=adcdefg;"})//靜態(tài)Header
@POST("api/users/login")
Call
執(zhí)行請(qǐng)求
public static final String API = "http://www.oschina.net/";
public static Retrofit retrofit = new Retrofit();
retrofit.registerApi(API);//注冊(cè)api
//進(jìn)階使用,假設(shè)服務(wù)器返回來(lái)的json內(nèi)容是aes加密的,那么可以添加轉(zhuǎn)化器,攔截響應(yīng),aes解密后再返回,此方法一定在子線程執(zhí)行,直接執(zhí)行耗時(shí)操作
retrofit.setConverterFactory(new ConverterFactory() {
@Override
public void convert(com.haibin.retrofit.Response response) {
response.setBodyString("{json}");//攔截響應(yīng)數(shù)據(jù),修改內(nèi)容,如aes解密后再返回
Log.e("響應(yīng)轉(zhuǎn)換器當(dāng)前線程: " + Thread.currentThread().getName());
}
});
//執(zhí)行異步請(qǐng)求,異步請(qǐng)求可以直接在UI線程執(zhí)行
retrofit.from(LoginService.class)
.login("xxx@qq.com", "123456", 2, 2);
.withHeaders(Headers...)//動(dòng)態(tài)添加某些Header
.execute(new Callback
審核編輯 黃宇
-
框架
+關(guān)注
關(guān)注
0文章
403瀏覽量
17475 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
188瀏覽量
4382
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論