- 接触安卓也有一段时间了。无论前后端数据交互,还是安卓端和后端的数据交互都是一样的道理。最基础的发送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 。项目中这两个方法足以应对所有数据交互了,姑且当个笔记记录一下吧,望后来的大佬指点一二。学术尚浅,如有贻误,还望指正,谢谢!(▽)