OKHttp介紹和實例展示

OkHttp是現在當下比較流行的一個網絡加載框架,可以使你在更加節約帶寬的前提下高效的完成數據和媒體的傳輸

OKHttp是一款高效的HTTP客戶端,支持連接同一地址的鏈接共享同一個socket,通過連接池來減小響應延遲,還有透明的GZIP壓縮,請求緩存等優勢

我們直接看使用吧 >>>>>

注意異步訪問網絡的回調方法並不是在主線程中執行(前提:Android會讓你新開線程去網絡操作),回調接口的方法不是在主線程 回調方法不能操作界面 想要操作界面還是得handler


//先實例化一個OkHttpClient
OkHttpClient client = new OkHttpClient(); 

//創建一個請求 對請求進行 各種設置
Request request = new Request.Builder()
                    .url("url") //請求的地址
                    .build();
//同步執行
Response response = client.newCall(request).execute();

//異步執行  在回調函數中拿到響應數據   


//注意回調方法並不是在主線程中執行(Android會讓你新開線程去網絡操作)
//回調接口的方法不是在主線程  回調方法不能操作界面 想要操作界面還是得handler
client.newCall(request).enqueue(new Callback() {
   public void onFailure(Request request, IOException e) {}
   public void onResponse(Response response) throws IOException{}
});

//打印響應信息體信息
System.out.println("rs:" + response.body().toString());

//post提交  鍵值對
  RequestBody formBody = new FormEncodingBuilder()
    .add("name", "tp")
    .add("pass", "tp")
    .add("info", "reewsf")
    .build();

      Request request = new Request.Builder()
      .url(url)
      .post(body)
      .build();

Response response = client.newCall(request).execute();
/***************************************************/

//post請求 提交json數據到服務器
//定義Post請求體的類型
  public static final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");

 RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url("xxx")
                .post(body) //將請求信息體附帶上
                .build();

//同步執行 
Response response = client.newCall(request).execute();

介紹幾個常用的

Response的 isSuccessful >>判斷是否成功的
Response.body().string(); >>將響應信息作爲String類型返回
//Post方式提交文件

public static final MediaType MEDIA_TYPE_MARKDOWN
  = MediaType.parse("text/x-markdown; charset=utf-8");


    File file = new File("README.md");
    Request request = new Request.Builder()
       .url("https://api.github.com/markdown/raw")
       .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file)) //創建一個文件請求體
       .build();

    Response response = client.newCall(request).execute(); //執行
    //拋出異常提示
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

    System.out.println(response.body().string());

/*使用Gson來解析JSON響應Gson是一個在JSON和Java對象之間轉換非常方便的api。這裏我們用Gson來解析JSON響應。
注意:ResponseBody.charStream()使用響應頭Content-Type指定的字符集來解析響應體。默認是UTF-8。*/

//創建一個Gson實例
private final Gson gson = new Gson();

 //創建請求
Request request = new Request.Builder()
       .url("xxxxx")
       .build();

//執行請求
Response response = client.newCall(request).execute();

//拋出自定義的異常
if(!response.isSuccessful())throw new IOException("error" + response);

//將響應信息 轉換成對應的實體類
User user= gson.fromJson(response.body().charStream(), User .class);

}

class User {
   //...
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章