retrofit+okhttp+rxjava

简介: retrofit+okhttp+rxjava

1.上传文件

 @Multipart
    @POST(API_P_PERSONALDATA)
    Flowable<FileBean> uploadfile(@PartMap Map<String, RequestBody> files);
//上传多张图片,文件,单张图片,单个语音等
    public void uploadFile( ResourceSubscriber<FileBean> subscriber, List<File> files, File picfile, File voiceFile,String name) {
        LinkedHashMap<String, RequestBody> bodyMap = new LinkedHashMap<>();
        if(files!=null&&files.size()>0){
            for (int i = 0; i < files.size(); i++) {
                bodyMap.put("pic"+"["+i+"]\"; filename=\""+files.get(i).getName(),RequestBody.create(MediaType.parse(Constant.IMG_MEDIATYPE),files.get(i)));
            }
        }
        if (voiceFile != null) {
            bodyMap.put("fileVoice\"; filename=\"" + voiceFile.getName(), RequestBody.create(MediaType.parse(Constant.MULTIPART_FORM_DATA), voiceFile));
        }
        if(picfile!=null){
            bodyMap.put("pic\"; filename=\""+picfile.getName(),RequestBody.create(MediaType.parse(Constant.IMG_MEDIATYPE),picfile));
        }
 
        bodyMap.put("token",RequestBody.create(MediaType.parse(Constant.TEXT_FROMDATA),UserInfoBean.getInstance().getToken()));
        bodyMap.put("id",RequestBody.create(MediaType.parse(Constant.TEXT_FROMDATA),UserInfoBean.getInstance().getUid()));
 
        if(!TextUtils.isEmpty(name)){
            bodyMap.put("name",RequestBody.create(MediaType.parse(Constant.TEXT_FROMDATA),name));
        }
        Flowable observable = httpService.uploadfile(bodyMap);
        toSubscribe(observable, subscriber);
    }

2.返回字符串

 @FormUrlEncoded
    @POST(API_P_INDEX)
    Flowable<ResponseBody> pIndex(@FieldMap Map<String, String> map);


public void pIndex(Context c, ListCompositeDisposable compositeSubscription, SubscriberListener<ResponseBody> subscriberOnNextListener,boolean isShow) {
    Map<String,String> params = new HashMap<>();
    params.put("token", UserInfoBean.getInstance().getToken());
    params.put("id",UserInfoBean.getInstance().getUid());
    Flowable<ResponseBody> observable = httpService.pIndex(StringUtils.sortMapByValue2(params));
    ResourceSubscriber subscriber = new ProgressSubscriber(subscriberOnNextListener, c, -1,isShow);
    toSubscribe(observable, subscriber);
    compositeSubscription.add(subscriber);
}
private void getData(){
    if(!UserInfoBean.getInstance().isLogin()){
        return;
    }
    HttpMethods.getInstance().pIndex(mContext, getComp(), new SubscriberListener<ResponseBody>() {
        @Override
        public void onNext(ResponseBody responseBody, int httpcode) {
            try {
                String data = responseBody.string().trim();
                SimpleBean bean = GsonUtil.GsonToBean(data,SimpleBean.class);
                if(bean.state== HttpMethods.HTTP_SUCCESS){
                    PersonInfoBean bean1 = GsonUtil.GsonToBean(data,PersonInfoBean.class);
                   




                }else{
                    ToastUtil.makeShortText(mContext,bean.message);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        @Override
        public void onError(int httpcode) {

        }
    },false);
}

3.下载文件

/**
 * 下载文件
 */
private void loadFile() {
    initNotification();
    if (retrofit == null) {
        retrofit = new Retrofit.Builder();
    }
    Call<ResponseBody> responseBodyCall = retrofit.baseUrl(BASE_URL)
            .client(initOkHttpClient())
            .build()
            .create(HttpService.class)
            .loadFile(url);
    downCalls.put(url,responseBodyCall);
    responseBodyCall.enqueue(new FileCallback(new ListCompositeDisposable(),APK_DOWN_PATH, filename) {

                @Override
                public void onSuccess(File file) {
                    //Log.e("zs", "请求成功");
                    // 安装软件
                    cancelNotification();
                    if(filename.endsWith(".apk")){
                        installApk(file);
                    }
                }
                @Override
                public void onLoading(long progress, long total) {
                   // Log.e("zs", progress + "----" + total);
                    if(total==0){
                        total = 100;
                    }
                    updateNotification(progress * 100 / total);
                }

                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    Log.e("zs", "请求失败");
                    cancelNotification();
                }
            });
}

4.7.0适配


public class FileProvider7 {
    public static Uri getUriForFile(Context context, File file) {
        Uri fileUri = null;
        if (Build.VERSION.SDK_INT >= 24) {
            fileUri = getUriForFile24(context, file);
        } else {
            fileUri = Uri.fromFile(file);
        }
        return fileUri;
    }



    private static Uri getUriForFile24(Context context, File file) {
        Uri fileUri = android.support.v4.content.FileProvider.getUriForFile(context, APP_ID+".FileProvider",
                file);
        return fileUri;
    }
    public static void setIntentDataAndType(Context context,
                                            Intent intent,
                                            String type,
                                            File file,
                                            boolean writeAble) {
        if (Build.VERSION.SDK_INT >= 24) {
            intent.setDataAndType(getUriForFile(context, file), type);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            if (writeAble) {
                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            }
        } else {
            intent.setDataAndType(Uri.fromFile(file), type);
        }
    }


    public static void setIntentData(Context context,
                                     Intent intent,
                                     File file,
                                     boolean writeAble) {
        if (Build.VERSION.SDK_INT >= 24) {
            intent.setData(getUriForFile(context, file));
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            if (writeAble) {
                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            }
        } else {
            intent.setData(Uri.fromFile(file));
        }
    }


    public static void grantPermissions(Context context, Intent intent, Uri uri, boolean writeAble) {

        int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION;
        if (writeAble) {
            flag |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
        }
        intent.addFlags(flag);
        List<ResolveInfo> resInfoList = context.getPackageManager()
                .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        for (ResolveInfo resolveInfo : resInfoList) {
            String packageName = resolveInfo.activityInfo.packageName;
            context.grantUriPermission(packageName, uri, flag);
        }
    }

    public static void grantPermissions2(Context context, Intent intent, Uri contentUri) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            ClipData clip =
                    ClipData.newUri(context.getContentResolver(), "A photo", contentUri);
            intent.setClipData(clip);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        } else {
            List<ResolveInfo> resInfoList =
                    context.getPackageManager()
                            .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
            for (ResolveInfo resolveInfo : resInfoList) {
                String packageName = resolveInfo.activityInfo.packageName;
                context.grantUriPermission(packageName, contentUri,
                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            }
        }
    }


相关文章
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
11585 61
|
人工智能 Java
通过okhttp调用SSE流式接口,并将消息返回给客户端
通过okhttp调用SSE流式接口,并将消息返回给客户端
|
10月前
|
人工智能 分布式计算 Cloud Native
云原生数据仓库AnalyticDB:深度智能化的数据分析洞察
云原生数据仓库AnalyticDB(ADB)是一款深度智能化的数据分析工具,支持大规模数据处理与实时分析。其架构演进包括存算分离、弹性伸缩及性能优化,提供zero-ETL和APS等数据融合功能。ADB通过多层隔离保障负载安全,托管Spark性能提升7倍,并引入AI预测能力。案例中,易点天下借助ADB优化广告营销业务,实现了30%的任务耗时降低和20%的成本节省,展示了云原生数据库对出海企业的数字化赋能。
441 3
|
12月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
机器学习/深度学习 数据采集 自然语言处理
使用Python实现深度学习模型:智能广告创意生成
使用Python实现深度学习模型:智能广告创意生成
255 4
|
数据可视化 前端开发 JavaScript
Java中的数据可视化与图表库选择
Java中的数据可视化与图表库选择
|
前端开发 JavaScript 索引
【Web 前端】说一说伪数组和数组的区别?
【4月更文挑战第22天】【Web 前端】说一说伪数组和数组的区别?
|
JavaScript 索引
JS数组常用方法总结,含ES6新方法,附示例代码
JS数组常用方法总结,含ES6新方法,附示例代码
|
存储 机器学习/深度学习 人工智能
顶顶通呼叫中心中间件介绍
顶顶通呼叫中心中间件包含IPPBX、自动外呼、质检、ACD、呼叫路由等呼叫中心功能,也包含电话机器人开发接口(ASR【对接了华为云,腾讯云,科大讯飞,阿里云,捷通华声等,mrcp等语音识别接口】,TTS【支持外呼时预先文字转换成声音和mrcp实时TTS】,VAD【集成噪音人声识别引擎】),话术引擎等ai机器人功能。所有数据都存储redis【话单可以存储到数据库】,支持群集,超大并发,可用于开发呼叫中心系统,智能外呼机器人系统,机器人客服系统。
571 94