安卓客户端通过okhttp 网络请求框架上传到服务器

安卓端上传图片到java服务器,通过okhttp 网络请求框架
获取到选中的头像后,上传到服务器

private void updateUserHeadImageUri(String imageString, String imagePath){
        //显示等待UI
        showLoading(getString(R.string.message_loading_loading));

        OkHttpClient okHttpClient = CloudHelper.getInstance().getOkHttpClient();

        String json = "";
        ApiInfo apiInfo = new ApiInfo();
        getApiInfo(apiInfo);
        apiInfo.setType(ApiConst.URI_API_CLIENT_UPDATE_USER_HEADIMAGE + "");
        ApiRequest<Object> apiRequest = new ApiRequest<Object>();
        apiRequest.setApiInfo(apiInfo);
        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        
        //ApiRequest.json文件的存放路径
        String outPath = this.getFilesDir().getAbsolutePath() + File.separator + ApiConst.FILES_USER + File.separator + mUserModel.getUserID();

        //重命名
        String outFilePath = "";
        //截取路径
        String[] array1=imagePath.split("/");
        for (int i = 1; i < array1.length - 1; i++){
            outFilePath += File.separator + array1[i];
        }
        //重命名之后的名字
        outFilePath += File.separator + "headImage.png";

        File outFile = new File(imagePath);
        outFile.renameTo(new File(outFilePath));

        //输出头像时,头像地址为改名后的地址
        File[] files = new File[1];
        files[0] = new File(outFilePath);

        MultipartBody.Builder multiBuilder = new MultipartBody.Builder("AaB03x");//构建者模式
        for (File file:files) {
            multiBuilder.addFormDataPart("file", StringUtilities.getValueEncoded(file.getName()), RequestBody.create(MultipartBody.FORM, file));
        }

        // 桥文件最后准备
        Gson gson = new Gson();
        json = gson.toJson(apiRequest);
        File apiRequestFile = new File(outPath + File.separator + "ApiRequest.json");
        FileUtilities.writeFile(outPath + File.separator + "ApiRequest.json",json);
        multiBuilder.addFormDataPart("ApiRequest",apiRequestFile.getName(),RequestBody.create(MultipartBody.FORM, apiRequestFile));

        MultipartBody multiBody = multiBuilder.build();
        RequestBody body = multiBody;

        Request request = new Request.Builder()
                .url(CloudHelper.getInstance().getUriApi() + ApiConst.URI_API_CLIENT_UPDATE_USER_HEADIMAGE)
                .addHeader("lang", LanguageUtilities.getInstance().GetUriLanguage())
                .post(body)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            Message msg;

            @Override
            public void onFailure(Call call, IOException e) {
                //云服务没有启动或者出错,或者设备没有连接到互联网!
                sendConnectErrMsg();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //失败
                if(false == response.isSuccessful()){
                    //云服务异步调用失败。
                    sendResponseErrMsg();
                    return;
                }
                Headers headers = response.headers();
                String result = headers.get(ApiConst.API_RESPONSE_RESULT);
                //错误部分需要进行统一处理!
                if(StringUtilities.isEmpty(result)){
                    //云服务异步调用失败。
                    sendResponseErrMsg();
                    return;
                }
                //失败的时候
                if(result.equalsIgnoreCase(ApiConst.API_RESPONSE_FAULT + "")){
                    String body = response.body().string();
                    //发送业务逻辑错误,错误都是有明确原因的
                    sendBusinessErrMsg(body);
                    return;
                }

                //成功的时候,什么也不做 如果需要则返回给各自子类自己完成
                msg = new Message();
                msg.what = ApiConst.API_REQ_TYPE_UPDATE_HEADIMAGE;
                //发个消息代表成功
                mBusinessHandlerUri.sendMessage(msg);
            }
        });
    }

服务器获取成功后,返回消息给安卓客户端

    @Override
    protected void handleBusinessMessage(Message msg) {
        super.handleBusinessMessage(msg);
        switch (msg.what){
            case 0://有明确原因的失败   ---- 云返回的有明确的错误的信息
                ApiResult apiResult = (ApiResult)msg.obj;
                       showOkMessage(apiResult.getMessage());
                ShowLoadFailed(apiResult.getMessage(), 2800);
                switch (apiResult.getCode()) {
                    default:
                        break;
                }
                break;

            case ApiConst.API_REQ_TYPE_UPDATE_HEADIMAGE:
                //将上传的图片保存到本地
                ShowLoadSuccess(getString(R.string.message_loading_update_success), 1500);
                String outFilePath = getUserHeadImagePath();
                BitmapUtilities.saveBitmapFile(mHeadImage,outFilePath);
            default:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值