国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

OkHttp的使用

2019-11-09 18:43:46
字體:
來源:轉載
供稿:網友

導入

首先如果使用eclipse 需要下載最新的jar包最新jar

如果使用android studio 則需要加入 compile“com.squareup.okhttp3:okhttp:3.6.0”

1 get請求

1 首先需要發(fā)送一個get請求步驟 首先需要構造一個request對象 參數最起碼需要一個url 可以通過Request.Builder設置更多參數2 然后通過request對象去構造得到一個Call對象 相當于封裝成了一個任務 然后就會有execute()和cancle()方法3 最后我們用異步方式執(zhí)行請求 調用了call.enqueue將call加入調度隊列中然后等待任務執(zhí)行完成 然后在callback中就可以得到結果比如獲取一個網頁內容//首先需要創(chuàng)建okhttpclient對象okHttpClient client = new OkHttpClient();//創(chuàng)建一個request請求final Request request = new Request.Builer().url("https://github.com/kristch").build();// new callCall call = client.newCall(request);//請求加入調度call.enqueue(new Callback(){@Override  publicvoidonFailure(Request request, IOException e)  {  }  @Override  publicvoidonResponse(final Response response) throws IOException { //String htmlStr = response.body().string();  }  });可以簡單封裝okHttpclient client = new OkhttpClient();String runGet(String url)throws IOException{Request request = new Request.Builder().url("https://github.com/kristch").build();Response reponse = client.newCall(request).execute();if(reponse.isSuccesssful()){return response.body().string();}else{throw new IOException();}

2 Post

2.1提交鍵值對

FormEncodingBuilder builder =new FormEncodingBuilder();  builder.add("username","123");Request request =new Request.Builder().url(url).post(builder.build()) .build();mOkHttpClient.newCall(request).enqueue(new Callback(){});post的時候,參數是包含在請求體中的;所以我們通過FormEncodingBuilder。添加多個String鍵值對,然后去構造RequestBody,最后完成我們Request的構造簡單封裝okhttpclient client = new Okhttpclient();String post(String url) throws Exception{RequestBody formBody = new FormEncodingbuilder();formBody.add("username","123");Request request = new Request.Builder().url(url).post(formBody).build();Response response = client.new Call(request).execute();if(response.isSuccessful()){return response.body().string();}else{}}

2.2 post提交json數據

public static final MediaType JSON = MediaType.parse("application/json",charset=utf-8);okhttpClient client = new OkhttpClient();String post(String url,String json)throws IOException{RequestBody body = RequestBody.create(JSON,json);Request request = new Request.Builder(url).url().post(body).build();Response response = client.newCall(request).execute();

if(response.isSuccessful()){

return response.body().string();}else{}

3 http文件上傳

一個可以構造RequestBody的builder 叫做MultipartBuilder 當我們需要做類似于表單的上傳上傳的時候就可以用這個File file = new File(Environment.getExternalStorageDirectory(),"demo.mp4");RequestBody fileBody = RequestBody.create(MeidaType.parse("application/octet-stream"), file));RequestBody requestbody = new MultipartBuilder().type(MultipartBuilder.FORm) .addPart(Headers.of( "Content-Disposition","form-data; name=/"username/""), RequestBody.create(null,"123")) .addPart(Headers.of( "Content-Disposition","form-data; name=/"mFile/"; filename=/"wjd.mp4/""), fileBody) .build();Request request = new Request.Builder().url(url).post(requestbody).build();Call call = new OkhttpClient().newCall(request);call.enqueue(new Callback(){});這段代碼是向服務器傳遞了一個鍵值對username:123和一個視頻文件,MultipartBuilder的addPart方法可以添加鍵值對或者文件4 文件下載下載一個文件 用string形式打印響應體 如果小文檔可以十分方便如果太大不要使用這個方法需要使用流的方式來處理bodyPRivate final OkhttpClient client = new OkhttpClient();public void run()throws Exception{Rquest request = new Requst.Builder().url(url).build();Response response = client.newCall(request).execute();if(!response.isSuccessful())throw new IOException(""+response);Headers res= response.headers();for(int i=0;i<res.size();i++){syso(res.name(i)+":"+res.value(i));}syso(res.body().string);}也可以client.newCall(request).enqueue(new Callback(){onFilure(){throwable.printStackTrace();}onResponse(){if(!response.isSuccessful())throw new IOException(""+response);Headers res= response.headers();for(int i=0;i<res.size();i++){syso(res.name(i)+":"+res.value(i));}syso(res.body().string);}});轉載來自:張鴻洋博客 和泡在網上的日子的文章


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 利川市| 崇文区| 潮州市| 湖北省| 奈曼旗| 溧阳市| 布尔津县| 阿坝县| 玉山县| 上林县| 天津市| 新河县| 新乐市| 林口县| 邵阳市| 武义县| 公主岭市| 涞源县| 陕西省| 通河县| 夏津县| 鲁甸县| 鄂托克旗| 益阳市| 沂源县| 莎车县| 商河县| 贡觉县| 太和县| 邢台市| 太白县| 大石桥市| 鲜城| 杭锦后旗| 上高县| 永胜县| 大方县| 新田县| 玉门市| 栾城县| 探索|