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" />

权限:

测试结果:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值