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