1. 程式人生 > >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);
            }
        }
    }