1.之前学习了两种基于http访问服务器的方法,一种是HttpURLConenction,一种是Apache下的HttpClient,说实话,这两种方法操作起来都不是很简单明了,所以当前首选的网络通信库是由Square公司开发的OKHttp
2.OKHttp的使用方法
2-1:导入(在gradle的依赖项中进行导入)
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
}
2-2:注意在AndroidManifest中添加网络许可
<uses-permission android:name="android.permission.INTERNET"/>
2-3:get方法(构造请求+发送请求+处理反馈信息 )
注:子线程中实现该操作
private void doGet(String s) {
final String getUrl=urlAdress+method+s;//
new Thread(new Runnable() {
@Override
public void run() {
Request request=new Request.Builder().url(getUrl).build();//构造请求
//开始发送请求
try {
//实现同步请求
Response response=client.newCall(request).execute();//发送请求,得到反馈信息Response
if(response.isSuccessful()){
Log.d("MSG",response.body().string());//打印反馈信息
}else{
Log.d("test","get failed");//服务器返回码不正确,发送信息失败
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
2-4:post方法
(post方法的关键是构建键值对(以key-value的形式),相较于get方法而言,所有的信息是以流的形式进行发送请求参数,所以这里封装了FormBody类进行请求的书写,在FormBody中构建键值对)
private void doPost(final String s) {
new Thread(new Runnable() {
@Override
public void run() {
//通过构造请求参数
FormBody formBody=new FormBody.Builder().add("***","***").build();//构建好了参数(key value键值对)
//构造完整请求
Request request=new Request.Builder().url(urlAdress+method).post(formBody).build();//向服务
//采用异步响应
//发送信息
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("test","post failed");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d("test",response.body().string());
}
});
}
}).start();
}