Android Studio OkHttp的使用
OkHttp的使用
總結(jié)一下,最近的學(xué)習(xí)OkHttp的過程中遇到的一列問題。
首先,要使用這個OkHttp之前需要添加OkHttp庫的依賴。編輯app/build.gradle文件,在dependencies閉包中添加如下內(nèi)容:
dependencies{
implementation ‘com.squareup.okhttp3:okhttp:4.1.0’
}
okhttp版本視實際情況選擇
發(fā)送GET請求
// kotlin //首先,需要創(chuàng)建一個OkHttpClient實例 val client = OkHttpClient()//創(chuàng)建一個Request對象,url為請求的鏈接,下面不做解釋,括號中的url根據(jù)實際填入http連接 //例如,val url = "https://www.baidu.com/",以下同理,url為String類型 val request = Request.Builder().url(url).build() //調(diào)用OkHttpClient的newCall()方法來創(chuàng)建一個Call對象, //并調(diào)用它的execute()方法來發(fā)送請求并獲取服務(wù)器返回的數(shù)據(jù) val response = client.newCall(request).execute() //再用如下寫法得到返回的具體內(nèi)容 val responseData = response.body?.string()由于網(wǎng)上較多的代碼還是用Java的,所以我寫的項目也是用了Java,這就麻煩了,在post請求中體現(xiàn)最深。由于kotlin的語法是不用聲明類型的,挺多變量我都不知道是什么類型。此外,kotlin運用了大量語法糖,導(dǎo)致語法上和Java差別還是很明顯的。
// java //首先,需要創(chuàng)建一個OkHttpClient實例 OkHttpClient client = new OkHttpClient(); //創(chuàng)建一個Request對象 Request request = new Request.Builder().url(url).build(); //調(diào)用OkHttpClient的newCall()方法來創(chuàng)建一個Call對象, Response response = client.newCall(request).execute(); //再用如下寫法得到返回的具體內(nèi)容,注意這里和kotlin是有區(qū)別的,java的在.string()前加?號會報錯 String responseData = response.body().string();發(fā)送POST請求
post請求會比get請求復(fù)雜一點。
// kotlin //首先需要構(gòu)建一個Request Body對象來存放待提交參數(shù),key,value根據(jù)實際填入 val requestBody = FormBody.Builder().add("key",value).build() //創(chuàng)建一個OkHttpClient實例 val client = OkHttpClient()//創(chuàng)建一個Request對象 val request = Request.Builder().url(url).post(requestBody).build() //調(diào)用OkHttpClient的newCall()方法來創(chuàng)建一個Call對象, //并調(diào)用它的execute()方法來發(fā)送請求并獲取服務(wù)器返回的數(shù)據(jù) val response = client.newCall(request).execute() //再用如下寫法得到返回的具體內(nèi)容 val responseData = response.body?.string() // java //首先需要構(gòu)建一個FormBody.Builder對象來存放待提交參數(shù), FormBody.Builder builder = new FormBody.Builder(); builder.add("key",value); //創(chuàng)建一個OkHttpClient實例 OkHttpClient client = new OkHttpClient();//創(chuàng)建一個Request對象 Request request = new Request.Builder().url(url).post(builder.build()).build(); //調(diào)用OkHttpClient的newCall()方法來創(chuàng)建一個Call對象, //并調(diào)用它的execute()方法來發(fā)送請求并獲取服務(wù)器返回的數(shù)據(jù) Response response = client.newCall(request).execute(); //再用如下寫法得到返回的具體內(nèi)容 String responseData = response.body().string();java發(fā)送post請求網(wǎng)上有的用new FormEncodingBuilder()創(chuàng)建請求表單RequestBody對象,這種寫法已經(jīng)被棄,我也被坑了很久才找到新的寫法
此外,response.body().string()不要寫成response.body().toString(), response.body().string()是將對象包含的內(nèi)容轉(zhuǎn)化為字符串,response.body().toString()是將對象直接轉(zhuǎn)化為字符串
到這里,我以為終于可以使用了。結(jié)果,一直拋出異常,上網(wǎng)查了后才發(fā)現(xiàn)
在Android 4.0以上,網(wǎng)絡(luò)連接方法execute()不能放在主線程上,不然就拋異常android.os.NetworkOnMainThreadExceptio,但是4.0下版本可以,不會報錯。所以記得發(fā)起請求時要另外開線程
總結(jié)
以上是生活随笔為你收集整理的Android Studio OkHttp的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运达股份是做什么的
- 下一篇: Thread——线程