安卓端和後端數據交互之OkHttp3的使用

  • 接觸安卓也有一段時間了。無論前後端數據交互,還是安卓端和後端的數據交互都是一樣的道理。最基礎的發送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 。項目中這兩個方法足以應對所有數據交互了,姑且當個筆記記錄一下吧,望後來的大佬指點一二。學術尚淺,如有貽誤,還望指正,謝謝!()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章