同步就是在當前主線程進行操做,而異步就是子線程。若是是同步的,在網絡請求結束後,纔會去進行下面的代碼;而異步是,開啓網絡請求後,代碼會繼續執行下去。網絡請求同步進行。
若是要經過結果才能繼續接下來的代碼的,那就用同步,若是隻是發送網絡請求,在以後的代碼並無緊密關聯,異步就能夠了。訪問網絡通常都是異步,不然很容易anr。json
一、Get網絡
OkHttpClient Client = new OkHttpClient(); Request request = new Request.Builder() .url("https://xxxxxxxxxxxxx") .build(); Call call = Client.newCall(request); //Get異步請求 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("OkHttp ",e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { Log.e("OkHttp ", response.body().string()); response.close(); } }); //或同步請求,能夠獲得response返回值 Response response=call.execute(); Log.e("OkHttp ", response.body().string()); response.close();
//傳入json格式的Http協議中的請求體 String json = "{'name':'Bowling'}"; RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); //1.五、 Request request = new Request.Builder() .url(url) .post(body) .build(); //二、 Call call = client.newCall(request); //三、 Response response=call.execute(); Log.e("OkHttp ",response.body().string()); response.close();
經常使用的MIME類型,在一些協議的消息頭中叫作「Content-Type」,經常使用的有:app
(1)application/json:JSON格式的數據異步
(2)application/x-www-form-urlencoded:最多見的請求格式,原生form表單請求結構,以鍵值對的形式傳遞默認會以這種方式ide
(3)multipart/form-data:常見的 POST 數據提交的方式。這種方式通常用來上傳文件,通常會生成一個 boundary 用於分割不一樣的字段,爲了不與正文內容重複,boundary 很長很複雜。而後 Content-Type 裏指明瞭數據是以 mutipart/form-data 來編碼,本次請求的 boundary是什麼內容。消息主體裏按照字段個數又分爲多個結構相似的部分,每部分都是以 --boundary 開始,緊接着內容描述信息,而後是回車,最後是字段具體內容(文本或二進制)。若是傳輸的是文件,還要包含文件名和文件類型信息。消息主體最後以 --boundary-- 標示結束表單數據。post
但發送表單數據時,通常採用FormBody來建立請求體:ui
HashMap<String,String> paramsMap=new HashMap<>(); paramsMap.put("name","哈哈"); paramsMap.put("client","Android"); FormBody.Builder builder = new FormBody.Builder(); for (String key : paramsMap.keySet()) { //追加表單信息 builder.add(key, paramsMap.get(key)); } RequestBody formBody=builder.build();