广告招募

当前位置:欧亚贸易网 > 技术中心 > 所有分类

跟我学编程:Android Okhttp框架以文件形式上传图片代码

2023年01月28日 09:36:43      来源:云南昌晖仪表制造有限公司 >> 进入该公司展台      阅读量:9

分享:

如何在Android  Okhttp框架以文件形式上传图片?网友“听海”写了这段代码,昌晖仪表在此分享给大家。
计算机编程

以Post为例
public Observable postImageview(final String url, final  MultipartBody requestBody){
        //创建被观察者
        Observable observable = Observable.create(new Observable.OnSubscribe(){
            @Override
            public void call(Subscriber subscriber) {
                final Subscriber mSubscriber=subscriber;
                //没有取消订阅的时候
                if(!mSubscriber.isUnsubscribed()){
                    //构建post请求
                    Request request=null;
                    String cookie=CliniciansApplication.getOkhttpCookie();
                    if(!BooleanUtils.isEmpty(cookie)){
                        request=new Request.Builder()
                                .addHeader("cookie",cookie)
                                .url(url)
                                .post(requestBody)
                                .build();
                    }else{
                        request=new Request.Builder()
                                .url(url)
                                .post(requestBody)
                                .build();
                    }
                    if(mOkHttpClient!=null){
                        mOkHttpClient.newCall(request).enqueue(new Callback() {
                            @Override
                            public void onFailure(Call call, IOException e) {
                                //通知订阅者的错误信息
                                mSubscriber.onError(e);
                            }


                            @Override
                            public void onResponse(Call call, Response response) throws IOException {
                                if(null!=response){//response 不为空
                                    if(response.isSuccessful()){//response 请求成功
                                        //通知订阅者的成功信息
                                        mSubscriber.onNext(response.body().string());
                                    }else{//response 请求失败
                                        //通知订阅者的错误信息
                                        IOException IOExceptionx=new IOException();
                                        mSubscriber.onError(IOExceptionx);
                                    }
                                }else{//response 为空
                                    //通知订阅者的错误信息
                                    IOException IOExceptionx=new IOException();
                                    mSubscriber.onError(IOExceptionx);
                                }
                                //通知完毕
                                mSubscriber.onCompleted();
                            }
                        });
                    }
                }
            }
        });
        return observable;
    }

 

调用

private void uploadAva(final String posturl,final File file,final String path){
        if((null!=mRxAndroidOkhttp)&&(null!=file)){
            showProgressDialogs();
            MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
            builder.addFormDataPart("files", file.getName(), RequestBody.create(MediaType.parse("image/png"), file));
            builder.addFormDataPart("sePath","avatar");
            MultipartBody requestBody = builder.build();
            //observable定义被观察者
            mObservable=mRxAndroidOkhttp.postImageview(posturl,requestBody);
            if(null!=mObservable){
                //定义观察者
                Subscriber mSubscriber=new Subscriber(){
                    @Override
                    public void onCompleted() {


                    }


                    @Override
                    public void onError(Throwable e) {
                        dismissProgressDialogs();
                        toast.showToast(StringConstant.errorstate1);
                    }


                    @Override
                    public void onNext(String s) {
                        parseAva(s,path);
                    }
                };


                /**
                 * 订阅者关联被观察者
                 * Schedulers.io()说明是输入输出的计划任务
                 * AndroidSchedulers.mainThread()说明订阅者是中ui主线程中执行
                 * */


                mObservable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(mSubscriber);
            }
        }
    }

版权与免责声明:
1.凡本网注明"来源:欧亚贸易网"的所有作品,版权均属于欧亚贸易网,转载请必须注明欧亚贸易网。违反者本网将追究相关法律责任。
2.企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
3.本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。 4.如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系。