您的位置:首页 > 理论基础 > 计算机网络

Okhttp3表单上传数据到服务器使用指南

2016-12-17 12:40 543 查看
最近做项目,需求是要修改个人信息,具体要求就是用户点击地区弹到一个对话框中,使用滚轮选择省份和地区,然后确定,把选择的地址上传到服务器保存,下次进入个人信息修改界面时从服务器拉取最新保存的用户地址数据,这里只介绍如何将用户选择的地址上传到后台服务器。

    (一) 首先是配置网络访问权限,在AS的gradle中配置环境:

    manifest中添加:<uses-permission android:name="android.permission.INTERNET"/>

    gradle中添加: compile 'com.squareup.okhttp3:okhttp:3.3.1'

   (二) 异步post请求:

    因为网络请求是耗时操作,因此我们需要在子线程中进行操作,具体Okhttp已经帮我们做了,这里需要构建client和请求体requestbody。 OkHttp3异步POST请求和OkHttp2有一些差别就是没有FormEncodingBuilder这个类,替代它的是功能更加强大的FormBody,具体使用如下:

   

private  OkHttpClient client = new OkHttpClient();

public void setPersonalInfoByOkhttp3(String url, final int typeTag) {

this.client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
public okhttp3.Response intercept(Chain chain) throws IOException {
okhttp3.Request request = chain.request();
okhttp3.Response response = chain.proceed(request);
return response;
}
})
.connectTimeout(30000, TimeUnit.MILLISECONDS)
.readTimeout(30000,TimeUnit.MILLISECONDS)
.writeTimeout(30000, TimeUnit.MILLISECONDS)
.build();

RequestBody requestBody = null;
switch (typeTag){

case 0:
requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("token", sharedPreferences.getString("token", ""))
.addFormDataPart("province", mUserLoginBean.getRegion().split(",")[0])
.addFormDataPart("region",mUserLoginBean.getRegion().split(",")[1])
.build();
break;
case 1:
requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("token", sharedPreferences.getString("token", ""))
.addFormDataPart("province", mUserLoginBean.getRegion().split(",")[0])
.addFormDataPart("region",mUserLoginBean.getRegion().split(",")[1])
.build();
break;

}

okhttp3.Request request = new okhttp3.Request.Builder().url(url).post(requestBody).build();

//回调  OkHttpfanh返回的数据一定要用runOnUiThread显示toast
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
final  String bodyStr = response.body().string();
Log.i("bodyStr","1"+bodyStr);
final boolean ok = response.isSuccessful();
runOnUiThread(new Runnable() {
public void run() {
if(ok){
Toast.makeText(PersonalSettingActivity.this, bodyStr, Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(PersonalSettingActivity.this, "server error : " + bodyStr, Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onFailure(Call call,final IOException e) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(PersonalSettingActivity.this, "error : "+e.toString(), Toast.LENGTH_SHORT).show();
}
});
}
});

}


   具体就是把用户设置的信息通过OKhttp上传到服务器后台。
   (3)另外需要注意的,所有HTTP请求的代理设置,超时,缓存设置等都需要在OkHttpClient中设置。如果需要更改一个请求的配置,可以使用  OkHttpClient.newBuilder()获取一个builder对象,该builder对象与原来OkHttpClient共享相同的连接池,配置等。

    参考文章:
    Android网络编程(六)OkHttp3用法全解析
    okhttp3使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐