Asynchttpclient的使用及请求与响应封装
来源:互联网 发布:汽车配件管理销售软件 编辑:程序博客网 时间:2024/05/21 09:47
android-async-http 开源框架可以使我们轻松地获取网络数据或者向服务器发送数据,最关键的是,它是异步框架,在底层使用线程池处理并发请求,效率很高,使用又特别简单。
一、简单使用
public static void reg(final Context cont,Bitmap photodata,String regData) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); //将bitmap一字节流输出 Bitmap.CompressFormat.PNG 压缩格式,100:压缩率,baos:字节流 photodata.compress(Bitmap.CompressFormat.PNG, 100, baos); baos.close(); byte[] buffer = baos.toByteArray(); System.out.println("图片的大小:"+buffer.length); //将图片的字节流数据加密成base64字符输出 String photo = Base64.encodeToString(buffer, 0, buffer.length,Base64.DEFAULT); //photo=URLEncoder.encode(photo,"UTF-8"); RequestParams params = new RequestParams(); params.put("photo", photo); params.put("name", "woshishishi");//传输的字符数据 String url = "http://10.0.2.2:8080/IC_Server/servlet/RegisterServlet1"; AsyncHttpClient client = new AsyncHttpClient(); client.post(url, params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, String content){ Toast.makeText(cont, "头像上传成功!"+content, 0) .show(); } @Override public void onFailure(Throwable e, String data){ Toast.makeText(cont, "头像上传失败!", 0) .show(); } }); } catch (Exception e) { e.printStackTrace(); } }
二、Request与Response对象的封装
1.LoginFragment.java
switch (v.getId()) { case R.id.btn_submit: String username = username_et.getText().toString(); String password = password_et.getText().toString(); android_id = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID).toUpperCase(); if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) { taoScreenDataManager.onLogin(username, password, android_id); startProgressDialog(getString(R.string.logining)); } else { ToastUtils.showShort(context, getString(R.string.account_or_pwd)); } break; case R.id.get_password: Intent intent = new Intent(context, ForgetPassActivity.class); context.startActivity(intent); break; }
由于项目中网络操作繁多,特写一个taoScreenDataManager封装各种网络操作
2.taoScreenDataManager.java
// 登陆 public void onLogin(String userName, String password, String mac) { LoginParams params2 = new LoginParams(userName, password, mac); final HttpBaseRequest request = new HttpBaseRequest(null, params2); client.post(Constant.URL_APPLOGIN, request.getHttpRequestParams(), new BaseJsonHttpResponseHandler<LoginInfo>() { @Override public void onSuccess(int statusCode, Header[] headers, String rawJsonResponse, LoginInfo response) { if (dataManagerListener != null) dataManagerListener.onAppLoginParamsCallBack((LoginParams) request.getParams2(), response); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, String rawJsonData, LoginInfo errorResponse) { if (dataManagerListener != null) dataManagerListener.onAppLoginParamsCallBack((LoginParams) request.getParams2(), errorResponse); } @Override protected LoginInfo parseResponse(String rawJsonData, boolean isFailure) throws Throwable { Log.v(TAG, "onLogin------" + rawJsonData); return isFailure ? null : (LoginInfo) new LoginInfo().parseResponse(rawJsonData); } }); }
AsyncHttpClient.post(String url, RequestParams params, ResponseHandlerInterface responseHandler)
由于Response的是一个json数据,所以采用BaseJsonHttpResponseHandler
重写onsuccess()、onfailure()、parseResponse()。其中parseResponse()会解析出LoginInfo对象
3.HttpBaseRequest.java
public RequestParams getHttpRequestParams() { StringBuilder sb = new StringBuilder(); RequestParams requestParams = new RequestParams(); if (params1 != null) { String json1 = EncodingUtils.toBase64String(params1.toJson()); requestParams.put("param1", json1); sb.append(json1); Log.i("qiao", "param1------" + json1); } if (params2 != null) { String json2 = EncodingUtils.toBase64String(params2.toJson()); requestParams.put("param2", json2); sb.append(json2); Log.i("qiao", "param2------" + json2); } requestParams.put("appId", appid); sb.append(appid); requestParams.put("key", EncodingUtils.hmacSHA1Encrypt(sb.toString(), privateKey)); return requestParams; }
构建RequestParams
4.写一个LoginInfo类,作为Response泛型,需要set、get方法
其实以上套用模式来看,更简单清晰易懂,可惜本人对模式还不甚了解。
0 0
- Asynchttpclient的使用及请求与响应封装
- AsyncHttpClient的数据请求使用的封装
- Android 使用Gson与AsyncHttpClient封装网络
- 网络请求框架AsyncHttpclient的简单使用
- Android网络请求---AsyncHttpClient的使用
- 使用AsyncHttpClient碰到的问题及解决方法
- 使用AsyncHttpClient碰到的问题及解决方法
- 使用AsyncHttpClient碰到的问题及解决方法
- 使用AsyncHttpClient碰到的问题及解决方法
- 使用NSURLConnection的网络请求与封装
- 3、RxJava2 & Retrofit2 封装实践 请求与响应的重度封装
- 使用AsyncHttpClient框架来完成网络数据的请求
- 使用开源框架AsyncHttpClient进行Json的Post请求
- AsyncHttpClient异步请求工具箱/简单使用(异步的同步支持)
- [Postman使用]请求与响应
- AsyncHttpClient的使用
- 关于AsyncHttpClient的使用
- Ajax 的请求与响应
- 大四上week2-4(抽象类,接口,Object类,扑克牌案例 )
- IMX6Solo启动流程-Linux 内核启动 一
- DataGridView和ListView比较
- Eclipse中Tomcat插件的使用说明
- 分冶法之归并排序
- Asynchttpclient的使用及请求与响应封装
- hdu1505city game dp
- 凌凯短信Webservice接口报错解决办法
- system() 函数执行遇到 Cannot allocate memory
- 用cxf编写基于spring的webservice之上篇
- C++学习之如何理解*&,即指针的引用
- UE设置
- Android onMeasure()
- [教程] Jsmooth打包Jar生成exe文件,实现不装Java环境运行