在第一篇中简单介绍了OkHttp的get请求发送,今天简单说下post请求发送json到服务器。
Android老版本网络请求:
HttpUrlConnection
Apache Http Client
Android6.0版本网络请求:
HttpUrlConnection
OkHttp
新版本废弃了老的网络请求,那么它的优势是什么呢?
1,支持SPDY,共享同一个Socket来处理同一个服务器的所有请求
2,如果SPDY不可用,则通过连接池来减少请求延时
3,无缝的支持GZIP来减少数据流量
4,缓存响应数据来减少重复的网络请求
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
public static final MediaType JSON=MediaType.parse("application/json; charset=utf-8");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//开启一个线程,做联网操作
new Thread() {
@Override
public void run() {
postJson();
}
}.start();
}
private void postJson() {
//申明给服务端传递一个json串
//创建一个OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//创建一个RequestBody(参数1:数据类型 参数2传递的json串)
RequestBody requestBody = RequestBody.create(JSON, json);
//创建一个请求对象
Request request = new Request.Builder()
.url("http://192.168.0.102:8080/TestProject/JsonServlet")
.post(requestBody)
.build();
//发送请求获取响应
try {
Response response=okHttpClient.newCall(request).execute();
//判断请求是否成功
if(response.isSuccessful()){\
//打印服务端返回结果
Log.i(TAG,response.body().string());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。
ZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的。
网友评论
源码解析:http://sina.lt/fdcQ
纪
还不错那
//申明给服务端传递一个json串
//创建一个OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//创建一个RequestBody(参数1:数据类型 参数2传递的json串)
RequestBody requestBody = RequestBody.create(String, jsonString);
//创建一个请求对象
Request request = new Request.Builder()
.url("http://192.168.0.102:8080/TestProject/JsonServlet")
.post(requestBody)
.build();
楼主 我的数据类型老是报错
public static final MediaType JSON = MediaType
.parse("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
private String result = null;
// post
public String postDevice(String json, String method) {
// 申明给服务器传递一个json串
// 创建一个RequestBody(参数1:数据类型 参数2传递的是json串)
RequestBody requestBody = RequestBody.create(JSON, json);
// 创建一个请求对象
Request request = new Request.Builder().url(Constants.WEB_URL + method)
.post(requestBody).build();
// 发送请求获取响应
try {
com.squareup.okhttp.Response response = client.newCall(request)
.execute();
if (response.isSuccessful()) {
return response.body().string();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private void post() {
File file1 = new File(Environment.getExternalStorageDirectory(), "default_default.jpg");
File file2 = new File(Environment.getExternalStorageDirectory(), "default_default.jpg");
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("version", "1")
.addFormDataPart("mobile", "158")
.addFormDataPart("validateCode", "433985")
.addFormDataPart("name", "戴")
.addFormDataPart("idCardNumber", "330")
.addFormDataPart("gmtBirthday", "1992-12-28")
.addFormDataPart("nation", "汉")
.addFormDataPart("gender", "男")
.addFormDataPart("registerAddress", "浙江省")
.addFormDataPart("password", "123456")
.addFormDataPart("idCardFile", "default_default.jpg", RequestBody.create(MEDIA_TYPE_PNG, file1))
.addFormDataPart("avatarFile", "default_default.jpg", RequestBody.create(MEDIA_TYPE_PNG, file2))
.build();
Request request = new Request.Builder().url("http://122.225.193.238:8081/api/v1/user/register").post(requestBody).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("test2", "onFailure: " + e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i("test2", "onResponse: " + response.body().string());
}
});
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"title\""),
RequestBody.create(null, "Square Logo"))
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"image\""),
RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
.build();
具体你可以看下Okhttp Post方式提交分块请求