一直想写博客来记录自己的学习状况,终于下定决心要来写这篇博客了。
最近一直在研究如何使用okhttp,现在终于可以发送了,哈哈。废话就不多说,接下来开始讲okhttp吧。目前主要讲如何通过post方法来发送http。此处有参考《第一行代码》
注意点一
在使用okhttp之前,我们需要先在项目中添加okhttp的依赖。编辑app/build.gradle文件,在dependencies闭包中添加如下内容:
dependencies {
compile fileTree(dir: ‘libs’, include: [’*.jar’])
androidTestCompile(‘com.android.support.test.espresso:espresso-core:2.2.2’, {
exclude group: ‘com.android.support’, module: ‘support-annotations’
})
compile ‘com.android.support:appcompat-v7:26.+’
compile ‘com.android.support.constraint:constraint-layout:1.0.2’
testCompile ‘junit:junit:4.12’
compile’com.squareup.okhttp3:okhttp:3.4.1’
}
添加上述依赖会自动下载两个库,一个是okhttp库,一个是okio库,后者是前者的通信基础。
注意点二
做耗时的操作时要在一个子线程里写,如果写在主线程里,会卡死的。(这里描述得不是很好,欢迎大家来评论和指导)
注意点三
有关网络的操作都需要声明一下权限,因此我们需要在AndroidManifest.xml文件里加入权限声明,如下所示:
下面我们来看一下okhttp的具体用法:
1)创建一个OkHttpClient的实列,如下所示:
OkHttpClient client = new OkHttpClient();
2)创建一个RequestBody对象(存放待提交的参数),如下所示:
RequestBody requestBody = new FormBody.Builder()
.add(“username”,et_username.getText().toString())
//et_username.getText().toString()是获取et_username的内容
.add(“password”,et_password.getText().toString())
.build();
3)在Request.Builder中调用一下post()方法,并将RequestBody对象传入:
Request request = new Request.Builder()
.url(“http://118.89.217.225:8080/Proj18/login”)
.post(requestBody)
.build();
//此处的url是一个后台的地址
4)调用OkHttpClient的newCall()方法来创建一个Call对象,并调用它的execute()方法来发送请求并获取服务器返回的数据,写法如下:
Response response = client.newCall(request).execute();
//execute()同步请求,需要try和catch
//enqueue方法是异步请求
那如何得到返回的具体内容呢?具体写法如下:
final String responseData = response.body().string();
这篇博客就写到这了,有说得不好或者不对的也希望大家来留言,给点建议。