android----AsyncHttpClient的get,post和图片上传

async-http-client库是一个基于回调函数的Http异步通信客户端Android组件,是在Apache的HttpClient库的基础上开发构建而成的。

Eclipse使用:导入android-async-http-1.4.4.jar 包, 点击下载

AndroidStudio: gradle中引入 compile 'com.loopj.android:android-async-http:1.4.8'

功能特色

  • 利用版4.3.6上游HttpClient代替Android提供defaulthttpclient
  • 兼容AndroidAPI 23高
  • 做异步HTTP请求处理的响应匿名回调
  • HTTP请求发生UI线程之外
  • 请求使用线程池限制并发资源使用情况
  • get /后参数生成器( RequestParams )
  • 多文件上传没有额外的第三方库
  • JSON上传流没有额外的图书馆
  • 处理循环和相对重定向
  • 小的开销给你的应用程序只90kb一切
  • 自动智能请求重试次数质量不一的移动连接优化
  • 自动gzip响应解码速度超快的请求支持
  • 二进制协议通信binaryhttpresponsehandler
  • 内置的响应分析JSON与jsonhttpresponsehandler
  • 节能反应直接进入文件fileasynchttpresponsehandler
  • 大的持久性Cookie,保存cookie到你的应用程序的SharedPreferences
  • 杰克逊JSON集成,gson或其他JSON序列化库(德)basejsonhttpresponsehandler
  • 与SAX解析器支持saxasynchttpresponsehandler
  • 语言和内容编码的支持,不仅仅是UTF-8

效果图:

            

  1 public class MainActivity extends Activity implements OnClickListener {
  2 
  3     public static AsyncHttpClient mHttpc = new AsyncHttpClient();
  4 
  5     private TextView mTextView;
  6     
  7     @Override
  8     protected void onCreate(Bundle savedInstanceState) {
  9         super.onCreate(savedInstanceState);
 10         setContentView(R.layout.activity_asynchttpclict);
 11         initView();
 12     }
 13 
 14     private void initView() {
 15         findViewById(R.id.btn1).setOnClickListener(this);
 16         findViewById(R.id.btn2).setOnClickListener(this);
 17         findViewById(R.id.btn3).setOnClickListener(this);
 18         findViewById(R.id.btn4).setOnClickListener(this);
 19         mTextView=(TextView) findViewById(R.id.Text);
 20     }
 21 
 22     @Override
 23     public void onClick(View v) {
 24         switch (v.getId()) {
 25         case R.id.btn1:
 26             showHttpGet1();
 27             break;
 28         case R.id.btn2:
 29             showHttpGet2("https://www.baidu.com");
 30             break;
 31         case R.id.btn3:
 32             showHttpGet3();
 33             break;
 34         case R.id.btn4:
 35             showHttpPost();
 36             break;
 37         case R.id.btn5:
 38             
 39         case R.id.btn6:
 40             
 41         default:
 42             break;
 43         }
 44 
 45     }
 46 
 47     private void showHttpGet1() {
 48         AsyncHttpClient client = new AsyncHttpClient();
 49         client.get("https://www.baidu.com", new AsyncHttpResponseHandler() {
 50             @Override
 51             public void onStart() { // 请求启动 请求前
 52             }
 53 
 54             @Override
 55             public void onSuccess(int statusCode, Header[] headers,
 56                     byte[] responseBody) { // 请求成功
 57                 StringBuffer result = new StringBuffer("");
 58                 int length = responseBody.length;
 59                 for (int i = 0; i < length; i++) {
 60                     result.append((char) (responseBody[i] & 0xff));
 61                 }
 62                 Toast.makeText(MainActivity.this, "结果:" + result.toString(), 2)
 63                         .show();
 64                 mTextView.setText("结果:" +result.toString());
 65             }
 66 
 67             @Override
 68             public void onFailure(int statusCode, Header[] headers,
 69                     byte[] responseBody, Throwable error) // 请求失败
 70             {
 71 
 72             }
 73 
 74             public void onRetry() { // 重试
 75 
 76             }
 77 
 78             @Override
 79             public void onProgress(int bytesWritten, int totalSize) { // 请求进度
 80 
 81             }
 82 
 83             @Override
 84             public void onFinish() { // 请求完成
 85 
 86             }
 87         });
 88     }
 89 
 90     public void showHttpGet2(String uri) {
 91         mHttpc.get(uri, null, new AsyncHttpResponseHandler() { // 请求失败
 92                     @Override
 93                     public void onFailure(int arg0, Header[] arg1, byte[] arg2,
 94                             Throwable arg3) {
 95                     }
 96 
 97                     @Override
 98                     public void onSuccess(int arg0, Header[] arg1,
 99                             byte[] responseBody) {
100                         StringBuffer result = new StringBuffer("");
101                         int length = responseBody.length;
102                         for (int i = 0; i < length; i++) {
103                             result.append((char) (responseBody[i] & 0xff));
104                         }
105                         Toast.makeText(MainActivity.this,
106                                 "结果:" + result.toString(), 2).show();
107                         mTextView.setText("结果:" +result.toString());
108                     }
109                 });
110     }
111 
112     private void showHttpGet3() {
113         AsyncHttpClient client = new AsyncHttpClient();
114         RequestParams params = new RequestParams();
115         params.put("q", "test");
116         params.put("showapi_appid", "11548");
117         // 当前时间
118         params.put("showapi_timestamp", "20160511151954");
119         params.put("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
120         client.get("https://route.showapi.com/32-9", params,
121                 new TextHttpResponseHandler() {
122                     @Override
123                     public void onSuccess(int statusCode, Header[] headers,
124                             String response) {
125                         Toast.makeText(MainActivity.this,
126                                 "结果:" + response.toString(), 2).show();
127                         mTextView.setText("结果:" +response.toString());
128                     }
129 
130                     @Override
131                     public void onFailure(int statusCode, Header[] headers,
132                             String responseBody, Throwable error) {
133                         Log.i("ERROR", error.toString());
134                     }
135                 });
136     }
137 
138     /*
139      * 获得字符串
140      */
141     public void showHttpPost() {
142         AsyncHttpClient client = new AsyncHttpClient();
143         RequestParams params = new RequestParams();
144         params.put("q", "test");
145         params.put("showapi_appid", "11548");
146         // 当前时间
147         params.put("showapi_timestamp", "20160511151954");
148         params.put("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
149         client.post("https://route.showapi.com/32-9", params,
150                 new AsyncHttpResponseHandler() {
151 
152                     @Override
153                     public void onFailure(int arg0, Header[] arg1,
154                             byte[] responseBody, Throwable arg3) {
155 
156                     }
157 
158                     @Override
159                     public void onSuccess(int arg0, Header[] arg1,
160                             byte[] responseBody) {
161                         StringBuffer result = new StringBuffer("");
162                         int length = responseBody.length;
163                         for (int i = 0; i < length; i++) {
164                             result.append((char) (responseBody[i] & 0xff));
165                         }
166                         Toast.makeText(MainActivity.this,
167                                 "结果:" + result.toString(), 2).show();
168                         mTextView.setText("结果:" +result.toString());
169                     }
170                 });
171 
172     }
173 
174     
175 
176     /**
177      * 上传单个文件
178      */
179     private void showFile() {
180         File myFile = new File("filePath");// filePath--->文件路径
181         RequestParams params = new RequestParams();
182         try {
183             params.put("time", "20160511151954");
184             params.put("sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
185             params.put("filename", myFile);
186             AsyncHttpClient client = new AsyncHttpClient();
187             client.post("url", params, new AsyncHttpResponseHandler() {
188 
189                 @Override
190                 public void onFailure(int arg0, Header[] arg1, byte[] arg2,
191                         Throwable arg3) {
192 
193                 }
194 
195                 @Override
196                 public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
197 
198                 }
199             });
200         } catch (FileNotFoundException e) {
201             e.printStackTrace();
202         }
203     }
204     /***
205      * 多个文件上传
206      * 
207      * @param sendFilesPath
208      */
209     public void uploadFile(ArrayList<String> sendFilesPath) {
210         if (sendFilesPath.size() == 0)
211             return;
212 
213         String strUploadFile = "";
214         AsyncHttpClient client = new AsyncHttpClient();
215         client.setURLEncodingEnabled(false);
216 
217         RequestParams params = new RequestParams();
218         params.put("time", "20160511151954");
219         params.put("sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
220         // 批量上传
221         for (int i = 0; i < sendFilesPath.size(); i++) {
222             File myFile = new File(sendFilesPath.get(i));
223             try {
224                 params.put(myFile.getName(), myFile);
225             } catch (FileNotFoundException e1) {
226                 continue;
227             }
228         }
229 
230         client.setTimeout(10000);
231         client.post(strUploadFile, params, new AsyncHttpResponseHandler() {
232 
233             @Override
234             public void onFailure(int statusCode, Header[] headers,
235                     byte[] responseBody, Throwable arg3) {
236                 Log.i("Show", "上传失败");
237             }
238 
239             @Override
240             public void onSuccess(int statusCode, Header[] headers,
241                     byte[] responseBody) {
242                 Log.i("Show", "上传成功");
243             }
244 
245             @Override
246             public void onProgress(int bytesWritten, int totalSize) {
247                 super.onProgress(bytesWritten, totalSize);
248                 int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);
249                 // 上传进度显示
250                 Log.i("Show", "上传进度显示:" + count);
251                 
252             }
253 
254             @Override
255             public void onRetry(int retryNo) {
256                 super.onRetry(retryNo);
257                 // 返回重试次数
258             }
259         });
260     }
261 
262 }

记得加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

源码点击下载https://github.com/DickyQie/android-network-request

原文地址:https://www.cnblogs.com/zhangqie/p/6139908.html