- 接觸安卓也有一段時間了。無論前後端數據交互,還是安卓端和後端的數據交互都是一樣的道理。最基礎的發送json,解析json。
一、最先接觸到就是okhttp,今天抽個時間來總結一下okhttp的使用吧。盜用一下網上的介紹(手動滑稽)
- okhttp簡介:
- HTTP是現代應用常用的一種交換數據和媒體的網絡方式,高效地使用HTTP能讓資源加載更快,節省帶寬。OkHttp是一個高效的HTTP客戶端,它有以下默認特性:
- 支持HTTP/2,允許所有同一個主機地址的請求共享同一個socket連接
- 連接池減少請求延時
- 透明的GZIP壓縮減少響應數據的大小
- 緩存響應內容,避免一些完全重複的請求
二、直接上實例吧,能跑纔是硬道理!
- 1、在build.gradle的dependencies 裏面添加依賴,這個也相當於maven一樣了,或者直接implement也行:
dependencies {
api 'com.squareup.okhttp3:okhttp:3.14.0'
}
- 2、在主AndriodMainfest.xml裏面添加權限,不然會各種被攔。
<uses-permission android:name="android.permission.INTERNET" />
- 3、數據交互無非就是post和get了。我就寫寫我的代碼吧。寫法各不相同。僅供參考。一般都需要開啓單獨的線程纔可訪問。安卓端對線程調用不好,程序馬上罷工。
- GET的方法,只需傳入所需調用的地址和接口組成的url即可,無參訪問接口。
public static String get(String url) {
Request request = new Request.Builder().url(url).build();
try {
Response response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
String result = response.body().string();
Log.d("success", result.toString());
return result;
}
} catch (Exception e) {
e.printStackTrace();
}
Log.d("fail", "返回參數爲空 !");
return null;
}
GET的調用方法:
new Thread(new Runnable() {
@Override
public void run() {
try {
String result = CommonCode.get(requestURL);
//此處根據需要對返回的json字符串進行處理解析。
} catch (Exception e) {
Log.d("failure", "run: " + e.toString());
}
}
}).start();
- POST的方法,只需傳入所需調用的地址和接口組成的url和所要提交的對象參數包。都是封裝好的方法,直接調用即可。
static String post(JSONObject param, String url){
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), param.toString());
try{
Request request = new Request.Builder().url(url).post(requestBody).build();
try (Response response = okHttpClient.newCall(request).execute()) {
String result = response.body().string();
if (null == result || "".equals(result)){
throw new Exception("返回了一個空值!");
}
return result;
}catch (Exception e){
throw e;
}
}catch (Exception e){
Log.d(TAG, "post: post請求失敗:" + e);
String result = "{'flag':0,'message':'" + e.toString() + "'}";
return result;
}
}
POST的調用方法:
new Thread(new Runnable() {
@Override
public void run() {
JSONObject param = new JSONObject();
try {
param.put(key, vanlue); //挨個put你的參數
String result = CommonCode.post(param, serverAddress);
} catch (Exception e) {
Log.d("failure", "run: " + e.toString());
}
}
}).start();
三、講了post和get的方法,來幾個額外封裝方法,讓我們獲取數據更加簡便吧。手動滑稽!
- 直接獲取jsonArray吧,在post和get的類裏面加個這。
public static JSONArray postGetJsonArray(JSONObject param, String url) {
String resultstr = post(param,url);
JSONArray result = JSONArray.parseArray(resultstr);
return result;
}
- 再來個直接解析result的方法。
public static JSONObject postGetJson(JSONObject param, String url) {
String resultstr = post(param,url);
try{
JSONObject result = JSONObject.parseObject(resultstr);
return result;
}catch (Exception e){
JSONObject failed = new JSONObject();
failed.put(Constants.Param.RESULT_FLAG,0);
failed.put(Constants.Param.RESULT_MESSAGE,e.toString());
return failed;
}
}
- 以上是本人寫的參考網上okhttp3使用,寫的post和get方法。網上還有說同步異步操作的,由於技術尚淺未能領悟其中真諦。對於安卓確實是菜的扣jio 。項目中這兩個方法足以應對所有數據交互了,姑且當個筆記記錄一下吧,望後來的大佬指點一二。學術尚淺,如有貽誤,還望指正,謝謝!(▽)