Android 网络请求之Xutils环境搭建

Xutils 在Android 开发中是一个比较老的网络请求框架,目前在市面上,仍然有一些老的项目在使用和维护.

本文给需要使用Xutils网络请求框架的朋友,提供一个快速搭建的代码参考:

app的module build,gradle中

添加:

compile 'org.xutils:xutils:3.4.0'
ParamsUtil.java
public class ParamsUtil {

    private static final String TAG = "ParamsUtil";
    public static ParamsUtil instances;

    public static ParamsUtil getInstances() {
        if (instances == null) {
            instances = new ParamsUtil();
        }
        return instances;
    }

    //绑定参数
    private RequestParams builderParams(Map<String, String> map) {
        RequestParams params = new RequestParams();
        Iterator<String> key = map.keySet().iterator();
        while (key.hasNext()) {
            String key_s = key.next();
            params.addQueryStringParameter(key_s, map.get(key_s));
        }

        
        return params;
    }

    private RequestParams builderBodyParams(Map<String, String> map) {
        RequestParams params = new RequestParams();
        Iterator<String> key = map.keySet().iterator();
        while (key.hasNext()) {
            String key_s = key.next();
            params.addBodyParameter(key_s, map.get(key_s));
        }
        return params;
    }

    public RequestParams appLogin1(String xxx, String yyy) {
        Map<String, String> params = new HashMap<>();
        params.put("xxx", xxx);
        params.put("yyy", yyy);
  
        return builderParams(params);
    }
}
HttpRequest.java
public class HttpRequest {

    public static HttpRequest instances;

    public static HttpRequest getInstances() {
        if (instances == null) {
            instances = new HttpRequest();
        }
        return instances;
    }

    //Get请求
    public void xGet(final Context context, RequestParams param, final String url, final Type cL, final RequestResultCallBack callback) {
        if (NetUtil.isNetConnected(context)) {
            param.setUri(url);
            Logger.i("uploadUrl", String.valueOf(param));
            param.setConnectTimeout(45 * 1000);//45秒缓存
            final long start_time = System.currentTimeMillis();
            x.http().get(param, new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {
                    Log.i("服务器成功时响应时间 = >", String.valueOf(System.currentTimeMillis() - start_time));
                    // Logger.json("succ", result);
                    Logger.e("succ", result);
                    NewBaseBean entity = JSON.parseObject(result, cL);
                    if (entity.getCode() == 200) {
                        callback.onSucess(entity);
                    } else {
                        callback.onFailure(-1, entity.getMessage());
                    }
                }

                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
                    callback.onFailure(32000, "您的网络不太理想,请稍后重试吧~");//超时
                    Logger.i("error", Constant.appendStr(ex.getMessage(),""));
                }

                @Override
                public void onCancelled(CancelledException cex) {
                    Logger.i("服务器请求取消 = >", Constant.appendStr(cex.getMessage(),""));
                }

                @Override
                public void onFinished() {
                    Logger.i("服务器请求完成 = >", "");
                }
            });
        } else {
            if (callback != null) {
                callback.onFailure(-2, "请检查网络是否正常");
            }
        }
    }

    //Post请求
    public void xPost(final Context context, final RequestParams param, final String url, final Type cL, final RequestResultCallBack callback) {
        if (NetUtil.isNetConnected(context)) {
            param.setUri(url);
            Logger.i("uploadUrl",  String.valueOf(param));
            param.setConnectTimeout(45 * 1000);//45秒缓存
            final long start_time = System.currentTimeMillis();
            x.http().post(param, new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {
                    Logger.i("服务器成功时响应时间 = >", String.valueOf(System.currentTimeMillis() - start_time) + "ms");
                    Logger.i("succ", result);
                    NewBaseBean entity = JSON.parseObject(result, cL);
                    if (entity.getCode() == 200) {
                        callback.onSucess(entity);
                    } else {
                        callback.onFailure(-1, entity.getMessage());
                    }
                }

                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
                    callback.onFailure(32000, "您的网络不太理想,请稍后重试吧~");//超时
                    Logger.i("error param", Constant.appendStr(String.valueOf(param)," ",ex.getMessage()) );
                }

                @Override
                public void onCancelled(CancelledException cex) {
                    Logger.i("服务器请求取消 = >", Constant.appendStr(cex.getMessage(),""));
                }

                @Override
                public void onFinished() {
                    Logger.i("服务器请求完成 = >", "");
                }
            });
        } else {
            if (callback != null) {
                callback.onFailure(-2, "请检查网络是否正常");
            }
        }
    }


    //只返回Json
    public void xPostjson(final Context context, final RequestParams param, final String url, final RequestResultJsonCallBack callback) {
        if (NetUtil.isNetConnected(context)) {
            param.setUri(url);
            Logger.iUrl("uploadUrl", param + "");
            param.setConnectTimeout(45 * 1000);//45秒缓存
            final long start_time = System.currentTimeMillis();
            x.http().post(param, new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {
                    Log.i("服务器成功时响应时间 = >", String.valueOf(System.currentTimeMillis() - start_time) + "ms");
                    Logger.eUrl("succ", result);
                    callback.onSucess(result);
                }

                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
                    Logger.e("errorParam", ex.getMessage());
                    callback.onFailure(32000, "您的网络不太理想,请稍后重试吧~");//超时
                }

                @Override
                public void onCancelled(CancelledException cex) {
                    Log.i("服务器请求取消 = >", Constant.appendStr(cex.getMessage(),""));
                }

                @Override
                public void onFinished() {
                    Logger.iUrl("服务器请求完成 = >", "");
                }
            });
        } else {
            if (callback != null) {
                callback.onFailure(-2, "请检查网络是否正常");
            }
        }
    }

    //Get请求
    public void xGet(final Context context, RequestParams param, final String url, final RequestResultJsonCallBack callback) {
        if (NetUtil.isNetConnected(context)) {
            param.setUri(url);
            Logger.i("uploadUrl", Constant.appendStr(String.valueOf(param),""));
            param.setConnectTimeout(45 * 1000);//45秒缓存
            final long start_time = System.currentTimeMillis();
            x.http().get(param, new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {
                    Log.i("服务器成功时响应时间 = >", String.valueOf(System.currentTimeMillis() - start_time));
                    // Logger.json("succ", result);
                    Logger.eUrl("succ", result);
                    callback.onSucess(result);
                }

                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
                    callback.onFailure(32000, "您的网络不太理想,请稍后重试吧~");//超时 这里报{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""} 这个错误
                    Logger.i("error", ex.getMessage() + "");
                }

                @Override
                public void onCancelled(CancelledException cex) {
                    Logger.i("服务器请求取消 = >", Constant.appendStr(cex.getMessage(),""));
                }

                @Override
                public void onFinished() {
                    Logger.i("服务器请求完成 = >", "");
                }
            });
        } else {
            if (callback != null) {
                callback.onFailure(-2, "请检查网络是否正常");
            }
        }
    }

}

Presenter中:

public void requesMsgDetailData(int id1,  final Context mContext) {
        context=mContext;
        RequestParams params = ParamsUtil.getInstances().getMsgDetail(id1);
        BaseApplication.getInstance().httpRequest.xPostjson(mContext, params, Constant.BASE_HTTP + ContantUrl.getMsgDetail, new RequestResultJsonCallBack() {
            @Override
            public void onSucess(String result) {
                Logger.e(TAG, result);
                try {
                    JSONObject object = new JSONObject(result);
                    int code = (int) object.get("code");
                    if (code == Constant.RETURN_SUCCESS__STATE_CODE) {
                        upDateUI(result);

                    } else {
                        if (code==201){
                            String message = (String) object.get("message");
                            mView.onFail(201,message);
                        }else{
                          mView.onFail(code,"请求失败,请稍后重试!");
                        }
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(int errorCode, String errorMsg) {
                mView.onFail(errorCode, errorMsg);
            }
        });
    }

 Xutils的图片上传步骤:

 1.先进行图片压缩:

 @Override
    public void savaImg(final String url, String name, String photo, Context context) {
        mPhoto = photo;
        mContext = context;
    
        this.name = name;
        final Random random = new Random();

        new Thread(new Runnable() {
            @Override
            public void run() {
                int i = random.nextInt(100);
                Bitmap sbitmap = ImageUtils.revitionImageSize(url, ContantUrl.Img_width, ContantUrl.Img_width);
                String sPath = Utils.saveImg(sbitmap, ContantUrl.PubImgPath, "s" + i + ".png");
                Logger.e(TAG, "sPath========" + sPath);
                Message message = new Message();
                message.what = 1000;
                Bundle bundle = new Bundle();
                bundle.putString("sPath", sPath);
                message.setData(bundle);
                handler.sendMessage(message);
            }
        }).start();
    }

工具类裁剪图片的方法:

public static Bitmap revitionImageSize(String path, int width, int height) {
        BufferedInputStream in = null;
        try {
            in = new BufferedInputStream(new FileInputStream(
                    new File(path)));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(in, null, options);
        try {
            if(in!=null) {
                in.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        int i = 0;
        Bitmap bitmap = null;
        while (true) {
            if ((options.outWidth >> i <= width) && (options.outHeight >> i <= height)) {
                try {
                    in = new BufferedInputStream(new FileInputStream(new File(path)));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                //options.inSampleSize = 4;
                options.inSampleSize = (int) Math.pow(2.0D, i);
                options.inJustDecodeBounds = false;
                bitmap = BitmapFactory.decodeStream(in, null, options);
                break;
            }
            i += 1;
        }
        return bitmap;
    }

保存图片的方法:

/**
     * 保存图片
     *
     * @param bm
     * @param pathName
     * @return
     */
    public static String saveImg(Bitmap bm, String savePath, String pathName) {
        Log.e(TAG, "saveImg: bm================="+bm );
        String filePath = savePath + pathName;
        File file = new File(savePath);
        if (!file.exists()) {
            file.mkdirs();
        }
        FileOutputStream fOut;
        try {
            fOut = new FileOutputStream(filePath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        }
        bm.compress(Bitmap.CompressFormat.PNG, 100, fOut);
        try {
            fOut.flush();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        try {
            fOut.close();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return filePath;
    }

图片上传:

/**
     * 图片上传
     *
     * @param sPath
     * @param mPhoto
     * @param mContext
     */
    @Override
    public  void requestUploadIcon(final String name, String sPath, String mPhoto, final Context mContext, final String xxx) {
        RequestParams params = new RequestParams();
        if (sPath != null) {
            File file = new File(sPath);
            long length = file.length();
            Logger.e(TAG, "--sPath---" + length);
            params.addBodyParameter("file", file, "image/png");
        } else {
            params.addBodyParameter("file", new File(mPhoto), "image/png");
        }
        addRequestHeader(params, xxx);
        params.setMultipart(true);
        BaseApplication.getInstance().httpRequest.xPostjson(mContext, params, Constant.BASE_HTTP + ContantUrl.uploadFile, new RequestResultJsonCallBack() {
            @Override
            public void onSucess(String result) {
                Logger.e(TAG, result);
                PicBean info = Constant.getPerson(result, PicBean.class);
                if (info.getCode() == Constant.RETURN_SUCCESS__STATE_CODE) {
                    networkUrl = info.getData().getUrl();
                    requestUpdatePersonInfo(name, networkUrl, mContext, token);
                } else {
                    Logger.e(TAG, info.getMessage());
                    mView.onFail(info.getCode(),info.getMessage());
                }
            }

            @Override
            public void onFailure(int errorCode, String errorMsg) {
                Logger.e(TAG, errorMsg);
                mView.onFail(errorCode,errorMsg);

            }
        });
    }

 protected void addRequestHeader(RequestParams params, String xxx) {
        params.setHeader("Content-Type", "application/json;charset=UTF-8");
        params.setHeader("xxx", xxx);
    }

 Json 提交方式:

   实例格式:

req: {
            kkk: c.strEnum({ 'fff': 'TXuu, 'kk': 'nnn' }),
            yyy: 
            mmm: 
            hhh: "8",
            bbb: 2,
            transactList: [
                {
                    ttt: "11111",
                    bbb: "333333",
                    aaa: "124314",
                    xxx: "415251",
                    qqq: "1512351",
                },
                {
                    ttt: "11111",
                    bbb: "333333",
                    aaa: "124314",
                    xxx: "415251",
                    qqq: "1512351",
                }
                  ,
                    .........
            ]
        }
//以下参数请忽略
private void submitRequestAppiontCarData() {
        int size = checkList.size();//cntNum
        String qqq= "";
        String CC= "";

        RequestParams params = new RequestParams();
        addRequestHeader(params);

        JSONObject object = new JSONObject();
        try {
            object.put("xx", CC);//上一页传递过来的数据
            object.put("CC", CC);//本页提取的数据
            object.put("CC", CC);//本页提取的数据
            object.put("CC", String.valueOf(size));
            object.put("CC", CC);
            JSONArray jsonArray = new JSONArray();
            for (int i = 0; i < checkList.size(); i++) {
                BDSuitcaseBean.DataBean.ListBean listBean = checkList.get(i);
                qqq= listBean.getQQQ();//1.
                eirId = listBean.getEirId();/

                if (i == 0) {
                    shipSeal = sealNo1Str;
                    JSONObject object1 = new JSONObject();
                    object1.put("AAA", ZZZ);
                    object1.put("ZZZ", ZZ);
                    object1.put("ZZ", ZZ);
                    object1.put("ZZ", ZZ);
                    object1.put("ZZ", ZZ);
                    jsonArray.put(object1);
                } else if (i == 1) {
                    ZX= ZZ;
                    JSONObject object1 = new JSONObject();
                    object1.put("CC", CC);
                    object1.put("CC", CC);
                    object1.put("CC", CC);
                    object1.put("CC", CC);
                    object1.put("CC", CCC);
                    jsonArray.put(object1);
                }

            }

            object.accumulate("transactList", jsonArray);
            params.setAsJsonContent(true);//支持json
            params.setBodyContent(object.toString());

        } catch (JSONException e) {
            Logger.e(TAG, "e--------" + e);
            e.printStackTrace();

        }

        BaseApplication.getInstance().httpRequest.xPostjson(mContext, params, Constant.BASE_HTTP + ContantUrl.getAppointCarSumit, new RequestResultJsonCallBack() {
            @Override
            public void onSucess(String result) {
                hideProgress();
                //todo some sthing
               
            }

            @Override
            public void onFailure(int errorCode, String errorMsg) {
                hideProgress();
            
            }
        });
    }

 post请求,后台是从map中取值 从bodyContent 中是取不到值的

Post 请求 如果传递的是 纯json数据,传递参数2 

1.传递格式:

{

ids: ['1','2'......],//id

truckLIP: 

mobile: "" //c.Rule.mobile

}

2.后台取值的方式,从bodyContent 中才能取到值,而从map中是取不到值的

 private void submitRequestAppiontCarData() {
        int size = checkList.size();//cntNum

        RequestParams params = new RequestParams();
        addRequestHeader(params);

        JSONObject object = new JSONObject();
        try {
            object.put("truckLIP", checkTruckNo);//上一页传递过来的数据
            object.put("mobile", phone);//本页提取的数据
            JSONArray jsonArray = new JSONArray();
            for (int i = 0; i < size; i++) {
                JXNHImportBean.DataBean.ListBean listBean = checkList.get(i);
                jsonArray.put(listBean.getId());
            }

            object.accumulate("ids", jsonArray);
            params.setAsJsonContent(true);//支持json
            params.setBodyContent(object.toString());

        } catch (JSONException e) {
            Logger.e(TAG, "e--------" + e);
            e.printStackTrace();

        }

        BaseApplication.getInstance().httpRequest.xPostjson(mContext, params, Constant.BASE_HTTP + ContantUrl.appintTruckDriver, new RequestResultJsonCallBack() {
            @Override
            public void onSucess(String result) {
                hideProgress();
               
            }

            @Override
            public void onFailure(int errorCode, String errorMsg) {
                hideProgress();
             
            }
        });

    }

猜你喜欢

转载自blog.csdn.net/wolfking0608/article/details/83414363
今日推荐