Content-Type:application/x-www-form-urlencoded 数据被编码为名称/值对,默认类型
Content-Type:multipart/form-data 数据被为一条信息,一般用于文件上传;
Content-Type:application/octet-stream 提交二进制数据,如果用于文件上传,只能上传一个文件
Content-Type:application/json 提交json数据
Get同步请求:
安卓当中要完成Get同步请求网络的请求必须要启动一个子线程
Request 创建请求对象
Builder() 构建器
url(url) 服务器的域名
build 返回请求对象Request实例对象
Call 准备好请求的对象
okHttpClient.newCall(request) 得到一个准备好请求的Call对象
call.execute() 调用execute进行同步请求,得到一个请求响应对象
Response 请求响应对象
//Get同步请求
findViewById(R.id.bt1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// public void getSync(View view){
//安卓当中要完成网络的请求必须要启动一个子线程
new Thread() {
@Override
public void run() {
//创建请求对象,url参数为域名
//build返回Request实例对象
Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();
//得到一个准备好请求的Call对象
Call call = okHttpClient.newCall(request);
try {
//调用execute进行同步请求
//得到一个请求响应
Response response = call.execute();
//response.body()得到响应数据然后输入
Log.i("TAG", "Get同步请求" + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
//}
}
});
Get异步请求:
call.enqueue 异步请求,传入回调对象
Callback 回调对象,需要重写onFailure请求失败的回调和onResponse结束的回调,只代表和服务器的请求结束
//Get异步请求
findViewById(R.id.bt2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建请求对象,url参数为域名
//build返回Request实例对象
Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();
//得到一个准备好请求的Call对象
Call call = okHttpClient.newCall(request);
//enqueue异步请求,传入回调对象
//Callback回调对象
call.enqueue(new Callback() {
@Override
//onFailure请求失败的回调
public void onFailure(Call call, IOException e) {
}
@Override
//onResponse结束的回调,只代表和服务器的请求结束
public void onResponse(Call call, Response response) throws IOException {
//this.code >= 200 && this.code < 300;//code200-299表示是成功的
if (response.isSuccessful()) {//判断是否返回成功
Log.i("TAG", "Get异步请求" + response.body().string());
}
}
});
}
});
post同步请求:
FormBody 代表一个form表单的请求体(就是需要提交的数据)通过构建器访问add添加数据(以键值对存储)
post(requestBody) 需要在请求对象(Request)中表名是用post方式请求,默认是Get请求。参数是定义的一些上传的数据或文件和上传文件的规则
调用execute进行同步请求(同上)
//post同步请求
findViewById(R.id.bt3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(){
@Override
public void run() {
//代表一个form表单的请求体(就是需要提交的数据)
// 使用add添加值
//build返回form表单的请求
FormBody formBody=new FormBody.Builder().add("a","1").add("b","2").build();
//创建请求对象,url参数为域名
//post() 默认就是get请求,所以要指明是post请求。post参数:必须传入一个请求体new RequestBody()
//build返回Request实例对象
Request request=new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
//得到一个准备好请求的Call对象
Call call=okHttpClient.newCall(request);
try {
//调用execute进行同步请求
//得到一个请求响应
Response response=call.execute();
Log.i("TAG", "post同步请求"+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
});
post异步请求:
和同步请求差不多一致。
enqueue异步请求,传入回调对象。(看Get请求调用异步)
//post异步请求
findViewById(R.id.bt4).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//代表一个form表单的请求体(就是需要提交的数据)
// 使用add添加值
//build返回form表单的请求
FormBody formBody=new FormBody.Builder().add("a","1").add("b","2").build();
//创建请求对象,url参数为域名
//post() 默认就是get请求,所以要指明是post请求。post参数:必须传入一个请求体new RequestBody()
//build返回Request实例对象
Request request=new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
//得到一个准备好请求的Call对象
Call call=okHttpClient.newCall(request);
//enqueue异步请求,传入回调对象
//Callback回调对象
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i("TAG", "post异步请求 "+response.body().string());
}
});
}
});