Retrofit是一个用于安卓和java的http框架,具体用法可以查看它的官网和github。网上也有很多使用教程,这里主要简单说下用它以form表单上传图片的方法。 官网Retrofit github https://github.com/square/retrofit
1.添加gradle引用
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0' //用于解析json数据
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' //这里用于retrofit与rxjava结合使用
2.请求接口
public interface HttpApi{
@Multipart //这里用Multipart
@POST("url/myurl") //请求方法为POST,里面为你要上传的url
Call<Result> myUpload(@Part List<MultipartBody.Part> partLis)
//注解用@Part,参数类型为List<MultipartBody.Part> 方便上传其它需要的参数或多张图片
//Result为我自定义的一个类
}
?3.初始化Retrofit
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
HttpApi service = retrofit.create(HttpApi.class);
4.完整代码开始上传图片包含内容
public void addtype(int article_typenum, String article_typename, String article_unit, File article_icon) {
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);//表单类型
RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), article_icon);//表单类型
builder.addFormDataPart("article_typenum", String.valueOf(article_typenum));
builder.addFormDataPart("article_typename", article_typename);
builder.addFormDataPart("article_unit", article_unit);
builder.addFormDataPart("article_icon", article_icon.getName(), body); //添加图片数据,body创建的请求体
List<MultipartBody.Part> parts = builder.build().parts();
RetrofitNetNew.build(Api.class)
.AddTypeApi(SPUtils.getInstance().getString("url") + ApiInterface.CATEGORY_LIST, parts)
.enqueue(new Callback<LocalAddtypeBean>() {
@Override
public void onResponse(Call<LocalAddtypeBean> call, Response<LocalAddtypeBean> response) {
if (response.body() == null) {
ToastUtils.showShort("网络请求错误,接口返回null!");
return;
}
if (response.body().getResult().equals("success")) {
EventActionInfo info = new EventActionInfo(EventBusContent.EVENT_BUS_ADD_TYPE);
EventBus.getDefault().post(info);
finish();
} else {
ToastUtils.showShort(response.body().getData().toString());
}
MaterialApp.handler.post(new Runnable() {
@Override
public void run() {
ld.show();
}
});
call.cancel();
}
@Override
public void onFailure(Call<LocalAddtypeBean> call, Throwable t) {
ToastUtils.showShort("网络错误请求接口失败");
MaterialApp.handler.post(new Runnable() {
@Override
public void run() {
ld.show();
}
});
t.printStackTrace();
call.cancel();
}
});
}
|