`
切切歆语
  • 浏览: 30173 次
  • 性别: Icon_minigender_1
  • 来自: 泸州市
社区版块
存档分类
最新评论

网络请求框架----AsyncHttpClient的get,post和图片上传服务器

阅读更多

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

Eclipse使用:导入android-async-http-1.4.4.jar包http://download.csdn.net/detail/dickyqie/9662215

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
  • 内置的响应分析JSONjsonhttpresponsehandler
  • 节能反应直接进入文件fileasynchttpresponsehandler
  • 大的持久性Cookie,保存cookie到你的应用程序的SharedPreferences
  • 杰克逊JSON集成,gson或其他JSON序列化库(德)basejsonhttpresponsehandler
  • 与SAX解析器支持saxasynchttpresponsehandler
  • 语言和内容编码的支持,不仅仅是UTF-8

    效果图:

    案例如下:

public class MainActivity extends Activity implements OnClickListener {

	public static AsyncHttpClient mHttpc = new AsyncHttpClient();

	private TextView mTextView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_asynchttpclict);
		initView();
	}

	private void initView() {
		findViewById(R.id.btn1).setOnClickListener(this);
		findViewById(R.id.btn2).setOnClickListener(this);
		findViewById(R.id.btn3).setOnClickListener(this);
		findViewById(R.id.btn4).setOnClickListener(this);
		mTextView=(TextView) findViewById(R.id.Text);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn1:
			showHttpGet1();
			break;
		case R.id.btn2:
			showHttpGet2("https://www.baidu.com");
			break;
		case R.id.btn3:
			showHttpGet3();
			break;
		case R.id.btn4:
			showHttpPost();
			break;
		case R.id.btn5:
			
		case R.id.btn6:
			
		default:
			break;
		}

	}

	private void showHttpGet1() {
		AsyncHttpClient client = new AsyncHttpClient();
		client.get("https://www.baidu.com", new AsyncHttpResponseHandler() {
			@Override
			public void onStart() { // 请求启动 请求前
			}

			@Override
			public void onSuccess(int statusCode, Header[] headers,
					byte[] responseBody) { // 请求成功
				StringBuffer result = new StringBuffer("");
				int length = responseBody.length;
				for (int i = 0; i < length; i++) {
					result.append((char) (responseBody[i] & 0xff));
				}
				Toast.makeText(MainActivity.this, "结果:" + result.toString(), 2)
						.show();
				mTextView.setText("结果:" +result.toString());
			}

			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable error) // 请求失败
			{

			}

			public void onRetry() { // 重试

			}

			@Override
			public void onProgress(int bytesWritten, int totalSize) { // 请求进度

			}

			@Override
			public void onFinish() { // 请求完成

			}
		});
	}

	public void showHttpGet2(String uri) {
		mHttpc.get(uri, null, new AsyncHttpResponseHandler() { // 请求失败
					@Override
					public void onFailure(int arg0, Header[] arg1, byte[] arg2,
							Throwable arg3) {
					}

					@Override
					public void onSuccess(int arg0, Header[] arg1,
							byte[] responseBody) {
						StringBuffer result = new StringBuffer("");
						int length = responseBody.length;
						for (int i = 0; i < length; i++) {
							result.append((char) (responseBody[i] & 0xff));
						}
						Toast.makeText(MainActivity.this,
								"结果:" + result.toString(), 2).show();
						mTextView.setText("结果:" +result.toString());
					}
				});
	}

	private void showHttpGet3() {
		AsyncHttpClient client = new AsyncHttpClient();
		RequestParams params = new RequestParams();
		params.put("q", "test");
		params.put("showapi_appid", "11548");
		// 当前时间
		params.put("showapi_timestamp", "20160511151954");
		params.put("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
		client.get("https://route.showapi.com/32-9", params,
				new TextHttpResponseHandler() {
					@Override
					public void onSuccess(int statusCode, Header[] headers,
							String response) {
						Toast.makeText(MainActivity.this,
								"结果:" + response.toString(), 2).show();
						mTextView.setText("结果:" +response.toString());
					}

					@Override
					public void onFailure(int statusCode, Header[] headers,
							String responseBody, Throwable error) {
						Log.i("ERROR", error.toString());
					}
				});
	}

	/*
	 * 获得字符串
	 */
	public void showHttpPost() {
		AsyncHttpClient client = new AsyncHttpClient();
		RequestParams params = new RequestParams();
		params.put("q", "test");
		params.put("showapi_appid", "11548");
		// 当前时间
		params.put("showapi_timestamp", "20160511151954");
		params.put("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
		client.post("https://route.showapi.com/32-9", params,
				new AsyncHttpResponseHandler() {

					@Override
					public void onFailure(int arg0, Header[] arg1,
							byte[] responseBody, Throwable arg3) {

					}

					@Override
					public void onSuccess(int arg0, Header[] arg1,
							byte[] responseBody) {
						StringBuffer result = new StringBuffer("");
						int length = responseBody.length;
						for (int i = 0; i < length; i++) {
							result.append((char) (responseBody[i] & 0xff));
						}
						Toast.makeText(MainActivity.this,
								"结果:" + result.toString(), 2).show();
						mTextView.setText("结果:" +result.toString());
					}
				});

	}

	

	/**
	 * 上传单个文件
	 */
	private void showFile() {
		File myFile = new File("filePath");// filePath--->文件路径
		RequestParams params = new RequestParams();
		try {
			params.put("time", "20160511151954");
			params.put("sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
			params.put("filename", myFile);
			AsyncHttpClient client = new AsyncHttpClient();
			client.post("url", params, new AsyncHttpResponseHandler() {

				@Override
				public void onFailure(int arg0, Header[] arg1, byte[] arg2,
						Throwable arg3) {

				}

				@Override
				public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {

				}
			});
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	/***
	 * 多个文件上传
	 * 
	 * @param sendFilesPath
	 */
	public void uploadFile(ArrayList<String> sendFilesPath) {
		if (sendFilesPath.size() == 0)
			return;

		String strUploadFile = "";
		AsyncHttpClient client = new AsyncHttpClient();
		client.setURLEncodingEnabled(false);

		RequestParams params = new RequestParams();
		params.put("time", "20160511151954");
		params.put("sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
		// 批量上传
		for (int i = 0; i < sendFilesPath.size(); i++) {
			File myFile = new File(sendFilesPath.get(i));
			try {
				params.put(myFile.getName(), myFile);
			} catch (FileNotFoundException e1) {
				continue;
			}
		}

		client.setTimeout(10000);
		client.post(strUploadFile, params, new AsyncHttpResponseHandler() {

			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable arg3) {
				Log.i("Show", "上传失败");
			}

			@Override
			public void onSuccess(int statusCode, Header[] headers,
					byte[] responseBody) {
				Log.i("Show", "上传成功");
			}

			@Override
			public void onProgress(int bytesWritten, int totalSize) {
				super.onProgress(bytesWritten, totalSize);
				int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);
				// 上传进度显示
				Log.i("Show", "上传进度显示:" + count);
				
			}

			@Override
			public void onRetry(int retryNo) {
				super.onRetry(retryNo);
				// 返回重试次数
			}
		});
	}

}


记得加网络权限

 

 

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

 

源码下载:

CSDN:http://download.csdn.net/detail/dickyqie/9702051

 

分享到:
评论

相关推荐

    引用开源框架通过AsyncHttpClient处理get/post请求

    引用开源框架发送get请求给服务器步骤: 1.创建异步请求端对象 2.发送get请求,(get请求参数含义:请求的url地址;异步请求的handler) 3.在成功请求里(status:状态返回码,headers:头部请求信息,responseBody...

    async-http-client-master_Asynchttpclient_

    - **发起GET和POST请求**:快速地发起HTTP GET和POST请求,获取或提交数据。 - **处理响应**:通过回调函数或Promise/Future模式处理HTTP响应,获取响应体、状态码、头部信息等。 - **流式处理**:对于大体积的数据...

    Android网络编程上传下载postGet请求

    在Android开发中,网络编程是不可或缺的一部分,尤其是涉及到与服务器交互时,如上传和下载数据。本篇文章将详细探讨Android中的HTTP请求,包括GET、POST方法的使用,以及上传和下载文件的实现策略。 首先,GET和...

    Android-async-http请求框架

    Android-异步HTTP请求框架是Android开发中常用的一个网络库,它使得在Android应用中进行网络请求变得更加简单和高效。这个框架的主要目的是解决Android主线程处理网络请求时可能导致的UI卡顿问题,通过异步处理,它...

    Android AsyncHttpClient 异步框架包(网络传输)

    4. **简单易用**:AsyncHttpClient提供了简洁的API,只需几行代码就能发送GET、POST等常见的HTTP请求,同时支持添加请求头和请求体。 5. **性能优化**:AsyncHttpClient内部采用了连接池技术,可以复用已建立的TCP...

    安卓文件下载上传解压相关-引用开源框架通过AsyncHttpClient进行文件上传.rar

    在这个压缩包中,重点介绍了如何利用开源框架AsyncHttpClient来处理文件的上传任务。AsyncHttpClient是一款异步HTTP客户端,适用于Android和Java,它提供了一种简单而高效的API来执行网络请求。 首先,我们来看文件...

    Android异步网络请求框架,超简单实用

    使用`AsyncHttpClient`时,你需要创建一个`AsyncHttpClient`实例,然后调用其`get`或`post`方法,指定URL和请求回调。回调通常包括`onSuccess`和`onFailure`方法,分别处理成功和失败的情况。例如: ```java ...

    利用Async框架的网络请求

    在Android应用开发中,网络请求是常见的操作,用于获取服务器数据、更新本地内容等。`Async框架`,尤其是`Android-Async-Http`库,为开发者提供了异步处理网络请求的强大工具,使得这类操作变得更加简单高效。下面...

    AsyncHttpClient从服务器读取数据并显示详情

    例如,你可以使用`get()`或`post()`方法发起GET或POST请求,然后通过`callback`来处理响应。 3. **请求缓存**:AsyncHttpClient支持HTTP缓存机制,可以预先将响应数据存储在本地,当网络状况不佳时,可以直接从缓存...

    android-async-http Android网络框架

    例如,可以使用`AsyncHttpClient`对象发起请求,并通过`get()`或`post()`方法指定URL。 3. **请求参数处理**: 框架支持添加请求头、查询参数和请求体数据。对于POST请求,可以通过`RequestParams`类方便地添加...

    AsyncHttpClient封装

    - 封装后的方法可以包括GET、POST、PUT、DELETE等各种HTTP请求,以及支持携带Header和Body的数据传递。 - 可以扩展错误处理机制,统一处理网络异常,如网络断开、超时等问题。 3. **AbsAdapter介绍** - ...

    Android应用源码之在远程上传以及下载图片---XFire框架.zip

    总的来说,掌握XFire框架对于Android开发者来说是一项重要技能,它能帮助我们更高效地处理网络请求,特别是涉及图片这类大文件的上传和下载操作。通过阅读和研究提供的源码,你可以深入了解XFire的工作原理,提升...

    AndroidAsyncTaskHttp网络请求Demo

    在实际应用中,你可能需要处理更多复杂的网络操作,如POST请求、文件上传/下载、错误处理等。`android-async-http`库提供了丰富的API,可以方便地支持这些需求。例如,你可以使用`AsyncHttpClient`类替代`...

    AsyncHttpClient

    AsyncHttpClient是Android开发中常用的第三方网络请求库,它以其高效、简单易用的特性深受开发者喜爱。这个框架主要处理的是应用程序中的异步HTTP请求,使得开发者可以在不阻塞主线程的情况下进行网络通信,提升了...

    Android开源框架Android-async-http的研究与应用.pdf

    Android开源框架Android-async-http是专为Android开发设计的一个异步HTTP客户端,它简化了网络请求的处理过程,提供了方便快捷的方法来获取网络数据或向服务器发送数据。该框架由***维护,具有易用性和高效处理并发...

    android 加载网络框架

    "android 加载网络框架"是指用于简化Android应用程序中网络请求处理的库。在这个场景下,我们关注的是`android-async-http`框架,它是一个基于Apache HttpClient的网络异步操作库,特别适合进行数据的后台加载,以...

    android利用Async 和Gson框架的网络请求

    本教程将深入探讨如何结合使用Android的AsyncTask和Gson框架进行网络请求。 AsyncTask是Android SDK提供的一种轻量级机制,用于在后台线程执行耗时操作,如网络请求,然后在UI线程更新结果,避免了主线程被阻塞导致...

    Http异步网络访问框架

    HttpClient是一个功能强大的HTTP客户端编程工具包,支持多种HTTP方法(GET、POST等)、HTTP协议版本(HTTP/1.0和HTTP/1.1)以及连接管理。它允许开发者进行复杂的HTTP操作,如设置请求头、处理重定向、管理Cookie等...

    带有本地缓存机制的http连接框架

    HTTP连接框架是一种用于处理HTTP请求和响应的库,它简化了网络通信过程,提供了一种标准的方式来发送GET、POST等HTTP请求,并接收服务器返回的数据。在Android中,常见的HTTP连接框架有Volley、OkHttp、Retrofit等,...

    android-async-http-master

    3. 请求参数:框架支持GET、POST等多种HTTP方法,可以方便地添加请求头和请求体,支持发送JSON、XML数据。 4. 错误处理:提供了一套完整的错误处理机制,包括重试策略、网络错误处理等。 5. 数据缓存:通过集成...

Global site tag (gtag.js) - Google Analytics