OkHttp的使用
总结一下,最近的学习OkHttp的过程中遇到的一列问题。 首先,要使用这个OkHttp之前需要添加OkHttp库的依赖。编辑app/build.gradle文件,在dependencies闭包中添加如下内容: dependencies{ implementation ‘com.squareup.okhttp3:okhttp:4.1.0’ } okhttp版本视实际情况选择
发送GET请求
val client = OkHttpClient()
val request = Request.Builder()
.url(url)
.build()
val response = client.newCall(request).execute()
val responseData = response.body?.string()
由于网上较多的代码还是用Java的,所以我写的项目也是用了Java,这就麻烦了,在post请求中体现最深。由于kotlin的语法是不用声明类型的,挺多变量我都不知道是什么类型。此外,kotlin运用了大量语法糖,导致语法上和Java差别还是很明显的。
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
发送POST请求
post请求会比get请求复杂一点。
val requestBody = FormBody.Builder()
.add("key",value)
.build()
val client = OkHttpClient()
val request = Request.Builder()
.url(url)
.post(requestBody)
.build()
val response = client.newCall(request).execute()
val responseData = response.body?.string()
FormBody.Builder builder = new FormBody.Builder();
builder.add("key",value);
val client = OkHttpClient()
Request request = new Request.Builder()
.url(url)
.post(builder.build())
.build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
java发送post请求网上有的用new FormEncodingBuilder()创建请求表单RequestBody对象,这种写法已经被弃,我也被坑了很久才找到新的写法 此外,response.body().string()不要写成response.body().toString(), response.body().string()是将对象包含的内容转化为字符串,response.body().toString()是将对象直接转化为字符串
到这里,我以为终于可以使用了。结果,一直抛出异常,上网查了后才发现 在Android 4.0以上,网络连接方法execute()不能放在主线程上,不然就抛异常android.os.NetworkOnMainThreadExceptio,但是4.0下版本可以不会报错。所以记得发起请求时要另外开线程
|