android网络请求线程池,利用线程池实现Android客户端的http网络数据请求工具类
该工具类值只实现了HTTP的get方法,参考get方法可轻松实现post、put、delete等方法,下面是get方法的实现
public class SimpleHttpClient {
private static final String TAG = SimpleHttpClient.class.getSimpleName();
public static int POOL_SIZE = 8;
private static ExecutorService sExecutorService;
private static int READ_TIME_OUT = 10 * 1000;
private static int CONNECTE_TIME_OUT = 10 * 1000;
private static final String ENCODE = "UTF-8";
static {
sExecutorService = Executors.newFixedThreadPool(POOL_SIZE);
}
public interface HttpCallback {
public void onSuccess(T response);
public void onError(T error);
}
public static void doGet(String url,final HttpCallback callback) {
final String _url = url;
sExecutorService.submit(new Runnable() {
@Override
public void run() {
URL url = null;
try {
url = new URL(_url);
} catch (MalformedURLException e) {
e.printStackTrace();
callback.onError(e.getMessage());
return;
}
BufferedReader bufferedReader = null;
StringBuffer response = new StringBuffer();
HttpURLConnection urlConnection = null;
try {
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setReadTimeout(READ_TIME_OUT);
urlConnection.setConnectTimeout(CONNECTE_TIME_OUT);
urlConnection.setRequestMethod("GET");
urlConnection.setUseCaches(false);
urlConnection.setRequestProperty("connection", "close");
urlConnection.connect();
int code = urlConnection.getResponseCode();
if (code >= 200 && code < 400) {
bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),ENCODE));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
response.append(line);
}
callback.onSuccess(response.toString());
} else {
bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getErrorStream(),ENCODE));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
response.append(line);
}
callback.onError(response.toString());
}
}catch (SocketTimeoutException e) {
e.printStackTrace();
callback.onError(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
callback.onError(e.getMessage());
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
});
}
}
测试:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void test(View view) {
String url = "http://www.weather.com.cn/adat/sk/101010100.html";
SimpleHttpClient.doGet(url, new HttpCallback() {
@Override
public void onSuccess(String respose) {
System.out.println("sucess:" + respose);
}
@Override
public void onError(String error) {
System.out.println("error:" + error);
}
});
}
}
布局文件:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.httpdemos.MainActivity" >
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="132dp"
android:layout_toRightOf="@+id/textView1"
android:onClick="test"
android:text="Button" />
权限:
测试结果:
android网络请求线程池,利用线程池实现Android客户端的http网络数据请求工具类相关推荐
- java外部接口图解_java代码实现访问网络外部接口并获取数据的工具类详解
java代码实现访问网络外部接口并获取数据的工具类 工具类代码,可以直接copy使用 package com.yqzj.util; import org.apache.log4j.LogManager ...
- 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )
文章目录 一.Bitmap 内存缓存策略 二.LruCache 内存缓存 三.LruCache 常用操作 四.LruCache 工具类 五.源码及资源下载 官方参考 : Google 官方提供的 内存 ...
- jQuery中的ajax、jquery中ajax全局事件、load实现页面无刷新局部加载、ajax跨域请求jsonp、利用formData对象向服务端异步发送二进制数据,表单序列化(异步获取表单内容)
jQuery中使用ajax: 在jQuery中使用ajax首先需要引入jQuery包,其引入方式可以采用网络资源,也可以下载包到项目文件中,这里推荐下载包到文件中:市面上有多个版本的jQuery库,这 ...
- android表白app源码,利用phonegap和原生Android,制作七夕表白神器(附Android源码)...
最近闲来无事,偶然从最代码(http://www.zuidaima.com/)找到一个应景(七夕)的html5页面特效,看了一看,觉得尽管在PC上效果挺好的,但是如果把这个东西放到手机上,单身程序员找 ...
- android list 替换元素_Java 集合(二)——Set 集合、List 集合和 Collections 工具类...
一.前言 在 Java 集合(一)中我们已经讲了 Collection 集合接口.Iterator 迭代器和泛型,今天我们来讲 Set 集合.List 集合 和 Collections 工具类. 二. ...
- 国密算法java语言的实现:利用bcprov和hutool库分别实现国密SM4算法工具类,对称密钥
SM4算法成为行业标准: SM4分组密码算法是2012年3月21日实施的一项行业标准: 2021年6月25日,我国SM4分组密码算法作为国际标准ISO/IEC 18033-3:2010/AMD1:20 ...
- java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类
目录 前言 Maven依赖 代码 总结 前言 在工作中是否存在这样的场景,多个线程提交执行,你不想全部线程执行结束了获取结果,而是有线程完成返回结果就获取消费.本文提供该场景的工具类,可以直接用哦. ...
- JDBC 数据库连接池(JDBCUtils工具类)
文章目录 前言 一.JDBC作用? 二.获取数据的连接方式 三.Statement/PreStatement执行sql 四.ResultSet结果集 五.JDBC相关API 六.事务 七.批处理 八. ...
- ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。
DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...
最新文章
- NAR:UNITE真菌鉴定ITS数据库——处理未分类和并行分类(数据库文章阅读笔记Markdown模板)...
- php程序员可能不了解的编程细节
- Vmware 中安装Unix
- container 的背后
- c语言实现函数给主函数中的指针赋值的方法
- ubuntu18.04 安装Teamviewer15出现依赖库出错
- 学习用TypeScript写React组件
- 360补丁打上以后漏洞依然存在?
- c语言程序设计2试卷答案,《C语言程序设计》试卷2参考答案.doc
- python开发安卓盒子_Python盒子:模块、包和程序
- 安装系统显示sql服务器未安装,win7系统安装SQLServer2005提示“SQL Server服务无法启动”的解决方法...
- TensorFlow激励函数
- android指纹测试,Android指纹识别
- delete操作对UNDO表空间容量的冲击
- 淘宝奇门对接(淘宝订单加密改造)
- 软件测试怎么自学?史上最全的「软件测试」自学路线图+资源包
- 7E3 Banding
- oracle归档日志百分比,oracle归档日志过满清理
- 利用Joypy绘制嵴线图的案例
- Gauss quadrature approximation by Lanczos algorithm