`
娜娜大人
  • 浏览: 5672 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Android中异步解析AsyncTask工具类封装

阅读更多
为了更加方便我们在子线程中对 UI 进行操作, Android 还提供了另外一些好用的工
具,AsyncTask 就是其中之一。借助 AsyncTask,即使你对异步消息处理机制完全不了解,
也可以十分简单地从子线程切换到主线程。当然,AsyncTask 背后的实现原理也是基于异步
消息处理机制的,只是 Android 帮我们做了很好的封装;
AsyncTask 类是一个抽象类,指定三个泛型参数,这三个参数的用途:
1. Params
在执行 AsyncTask 时需要传入的参数,可用于在后台任务中使用。
2. Progress
后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位。
3.Result
当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型。
因此,一个最简单的自定义 AsyncTask 就可以写成如下方式:
class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
……
}
学习了HttpURLConnection后,每次发起请求都需要使用异步加载,因为网络请求必须放在子线程中执行,一个应用程序很可能会在许多地方都使用到网络功能,而代码只有网络请求的路径不同,因此;我们可以把异步加载和发起网络请求提取到一个公共的类库中,这个类不处理图片,只是把一个网址最终返回一个json串的处理类;
1;把流转为字符串的工具类
package com.example.asynnet.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class ReadStreamUtils {
	public static String toJson(InputStream is) {
		byte[] b = new byte[1024];
		int len = 0;
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		try {
			while ((len = is.read(b)) != -1) {
				os.write(b, 0, len);
				os.flush();
			}
			return os.toString("utf-8");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (os != null)
					os.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return null;
	}

}


2; AsynTask工具类提取
package com.example.asynnet.util;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.os.AsyncTask;

public class UrlFileAsynNetUtils extends AsyncTask<String, Void, String> {

	@Override
	protected String doInBackground(String... params) {
		try {
			URL url = new URL(params[0]);
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			connection.setDoInput(true);
			connection.setDoOutput(true);
			connection.setConnectTimeout(8000);
			connection.setReadTimeout(8000);
			if (connection.getResponseCode() == 200) {
				return ReadStreamUtils.toJson(connection.getInputStream());
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

}


3. Activity中传入url就可获得json串了
        private ListView lv;
	private List<String> types;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = (ListView) findViewById(R.id.lv_booksort);
		String url = "http://japi.juhe.cn/comic/category?key=26e141e02d5c802d39ccf3ae918a7146";
		UrlFileAsynNetUtils netu = new UrlFileAsynNetUtils() {

			@Override
			protected void onPostExecute(String result) {
				Gson gson = new Gson();
				BookSortJson list = gson.fromJson(result, BookSortJson.class);
				types = list.result;
				//
				lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,
						android.R.layout.simple_list_item_1,types ));
			}
		};
		// 开始调用
		netu.execute(url);
		
		//点击进行查询对应类型的图书列表
		lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Intent intent=new Intent(MainActivity.this, BookItemActivity.class);
				intent.putExtra("type", types.get(position));
				startActivity(intent);
			}
		});
	}
}

0
0
分享到:
评论

相关推荐

    android任务后台处理 asyncTask封装

    此外,从Android 3.0(API级别11)开始,`AsyncTask`的执行策略有所改变,多个相同`AsyncTask`实例可能会并发执行,而非按顺序执行,因此在高版本Android中应特别注意这一点。 总的来说,`AsyncTask`是Android...

    Android的AsyncTask异步任务

    在Android应用开发中,AsyncTask是一个非常重要的工具类,它为开发者提供了一种方便的机制来执行后台操作,同时能够在线程间进行数据交互,确保UI的流畅性。本篇文章将深入探讨Android的AsyncTask异步任务,以及如何...

    基于Android系统Api封装常用工具类.zip

    8. **线程和异步处理工具类**:可能包含对`AsyncTask`的封装,或者使用`Handler`、`Runnable`、`ThreadPoolExecutor`来实现线程管理和异步任务。 9. **Log工具类**:提供日志打印功能,可以设置不同的日志级别,...

    android异步任务设计思详解(AsyncTask)

    Android中的异步任务设计主要体现在`AsyncTask`类上,它是Android SDK提供的一种方便快捷的多线程解决方案,用于在后台执行耗时操作,并在完成后更新UI。`AsyncTask`的广泛使用是因为它简化了线程与主线程之间的通信...

    okHttp+AsyncTask封装请求框架不需手动解析

    AsyncTask是Android提供的一个工具类,用于在后台线程执行耗时操作,然后在UI线程更新结果。它包含三个泛型参数:Params表示输入参数,Progress表示后台任务进度,Result表示任务结果。AsyncTask提供了onPreExecute...

    android 异步线程http请求模块封装

    在Android中,我们常用HttpURLConnection、Volley、OkHttp等库来处理HTTP请求。这些库都支持异步请求,能有效提高网络访问性能。 对于"ZMHTTP_TOOL"这个文件,它可能是封装好的一个HTTP请求工具类或者库。在实际...

    封装AsyncTask

    AsyncTask是Android开发中用于在UI线程之外执行耗时操作的一种工具,它允许开发者在后台线程中执行任务,并在完成后更新UI。在Android应用中,由于主线程(UI线程)负责处理用户交互,如果在此线程上执行耗时操作,...

    AsyncTask类实例详解

    综上所述,AsyncTask是Android中处理短时、轻量级异步任务的工具,它简化了多线程编程,并确保了UI线程的安全性。但是,随着Android版本的更新,开发者应当考虑使用更现代的解决方案来替代AsyncTask。

    android开发必备工具类

    在Android开发过程中,工具类是不可或缺的一部分,它们可以极大地提高开发效率,简化代码,使得开发者能够更加专注于核心功能的实现。以下是一些Android开发中常用的工具类及其详细知识点: 1. **日志工具类**: -...

    android listView 异步加载图片

    这篇名为“ImageLoader”的Java文件很可能就是一个实现图片异步加载的工具类。在Android中,我们通常使用AsyncTask、Handler、Thread、Service或者第三方库如Glide、Picasso、Universal Image Loader等来实现这个...

    Android TCP Socket通信封装

    通过封装这些功能,我们可以创建一个可重用的TCP通信组件,方便在多个Android应用中进行服务器通信。文件`TcpSocketCommunication`可能包含了具体的代码实现或示例,用于演示如何使用封装好的TCP Socket客户端。在...

    android工具类

    工具类可以封装这些异步处理逻辑,确保UI线程不被阻塞。 8. **其他工具类**: 还有其他常见的工具类,如`StringUtils`(字符串操作)、`BitmapUtils`(图片处理)、`LogUtils`(日志记录)等,它们分别对应特定...

    android常用工具类集合(可直接使用)

    10. **异步任务处理工具类**:如使用AsyncTask、Handler或RxJava进行后台任务处理,工具类可以提供更友好的API来执行异步操作。 这些工具类都是Android开发中的常用模块,直接使用可以避免重复造轮子,提高开发效率...

    Android收藏的工具类

    在Android中,MD5工具类可以帮助我们快速计算字符串或文件的MD5值,确保数据的一致性或安全。 6. **SDCard操作工具类**: SDCard工具类用于在外部存储空间进行文件操作,如读写文件、检查SD卡是否存在、获取SD卡...

    Android开发工具类

    本压缩包包含的"Android开发工具类"是一个预封装好的库,可以直接引入到你的Android项目中,为你的应用添加各种实用功能。 1. **开发源码(develop(source).jar)** 这个`.jar`文件包含了工具类的源代码。导入此...

    Android 开发常用的工具类

    在Android开发过程中,工具类(Utility Classes...以上只是Android开发常用工具类的部分示例,实际开发中可能还会涉及XML解析、JSON序列化、动画控制等多个方面。合理使用工具类可以极大地提高代码质量,降低维护成本。

    AsyncTask异步任务

    尽管这里的标题提到的是"直接使用的C++封装库",但通常AsyncTask是Android SDK中的一个Java类,用于解决在Android应用中执行耗时操作而不会阻塞主线程的问题,确保用户界面的流畅性。这里我们将重点讨论Android平台...

    Android常用工具类

    在Android开发过程中,工具类(Utils Class)是程序员经常使用的一种设计模式,它封装了一些常见的、重复的操作,以便在项目中各个地方复用,提高代码的可读性和维护性。"Android常用工具类"通常包括各种实用方法,...

    安卓开发框架工具类相关-常用android工具类收集.rar

    10. **线程和异步处理工具类**:如AsyncTask、Handler、Runnable、Thread或使用现代的RxJava、Coroutines等库来实现异步操作。 11. **权限检查与请求工具类**:在Android系统中,针对不同的API级别,工具类可以处理...

Global site tag (gtag.js) - Google Analytics