Retrofit upload files and text

首先定义上传的接口API

public interface FileUploadService {
    @Multipart
    @POST("upload.action")
    public abstract Observable<String> upLoadFiles(@PartMap Map<String, RequestBody> paramMap, 
    @QueryMap Map<String, String> paramMap1);

}

当然里面的参数可以随便定义,匹配传输类型即可;

    private Retrofit mRetrofit;
    private final static String url = "http://localhost:8080/ProjectName/";
    private Retrofit getRetrofit() {
        if (mRetrofit == null)
            mRetrofit = new Retrofit
                    .Builder()
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .baseUrl(url)
                    .client(genericClient())
                    .build();
        return mRetrofit;
    }

自定义OkhttpClient ,增加头文件;

public static OkHttpClient genericClient() {
        OkHttpClient httpClient = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        Request request = chain.request()
                                .newBuilder()
                                .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
                                .addHeader("Accept-Encoding", "gzip, deflate")
                                .addHeader("Connection", "keep-alive")
                                .addHeader("Accept", "*/*")
                                .addHeader("Cookie", "add cookies here")
                                .build();
                        return chain.proceed(request);
                    }

                })
                .build();

        return httpClient;
    }

最关键的是这个;

FileUploadService fileUpLoad = getRetrofit().create(FileUploadService.class);
Observable<String> observable = service.upLoadFiles(getFiles(),getStrings());
observable.subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe(new Subscriber<String>() {
                                @Override
                                public void onCompleted() {
                                    showLog("completed");
                                }

                                @Override
                                public void onError(Throwable e) {
                                    showLog("onerror");
                                }

                                @Override
                                public void onNext(String o) {
                                    showLog("on next");
                                }
                            });

数据源:

private Map<String, RequestBody> getFiles()
    {
        HashMap localHashMap = new HashMap();
        File f = new File("file");
        RequestBody localRequestBody = RequestBody.create(MediaType.parse("application/otcet-stream"), f);
        localHashMap.put(f.getName() + "\"; filename=\" " + f.getName(), localRequestBody);
            return localHashMap;
     }
private Map<String, String> getStrings()
    {
        Map localHashMap = new HashMap();
        localHashMap.put("key", "value");
        return localHashMap;
    }

具体的应用就是这样
参考:
Retrofit – Java(Android) 的REST 接口封装类库
Retrofit 2.0:有史以来最大的改进
Retrofit网络请求Service,@Path、@Query、@QueryMap…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值