package com.kitty.poclient.thread;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.SocketTimeoutException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.protocol.HTTP;
import android.os.Handler;
import android.os.Message;
import com.kitty.poclient.util.HttpClientManager;
public class SynchroTask {
//获取当前系统的CPU 数目 ,ExecutorService通常根据系统资源情况灵活定义线程池大小
public final static RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardOldestPolicy();
// private final static BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(50) ;
private final static SynchronousQueue<Runnable> queue = new SynchronousQueue<Runnable>() ;
public final static ThreadPoolExecutor executorService = new ThreadPoolExecutor(5, 10,200, TimeUnit.SECONDS, queue,handler);
public static void doGet(final String url,final TaskCallback ajaxCallback)
{
final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
ajaxCallback.callback(msg.what,(String)msg.obj);
}
};
executorService.submit(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
InputStream inputStream = null;//输入流对象
HttpClient httpClient = null;
HttpGet httpGet = null;
try{
httpGet = new HttpGet(url);
httpGet.setHeader("Connection", "close");
//生成一个http客户端对象
httpClient = HttpClientManager.getHttpClient();
//发送请求
HttpResponse httpResponse = httpClient.execute(httpGet);//接收响应
int code = httpResponse.getStatusLine().getStatusCode();
String result = "";
if(code==200){
HttpEntity httpEntity = httpResponse.getEntity();//取出响应
//客户端收到响应的信息流
inputStream = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while((line = reader.readLine()) != null){
result = result + line;
}
}
Message msg = handler.obtainMessage(code, result);
msg.sendToTarget();
}catch(SocketTimeoutException e){
if(e.getMessage()!=null){
Message msg = handler.obtainMessage(-101, e.getMessage());
msg.sendToTarget();
}else{
Message msg = handler.obtainMessage(-101, "请求超时");
msg.sendToTarget();
}
}catch(Exception e){
e.printStackTrace();
Message msg = handler.obtainMessage(-1, e.getMessage());
msg.sendToTarget();
}finally{
try {
if(inputStream!=null){
inputStream.close();
}
if(httpGet!=null){
httpGet.abort();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
public static void doPost(final String url,final List<NameValuePair> nameValuePairs,final TaskCallback ajaxCallback)
{
final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
ajaxCallback.callback(msg.what,(String)msg.obj);
}
};
executorService.submit(new Runnable() {
@Override
public void run() {
InputStream inputStream = null;//输入流对象
HttpPost httpPost = null;
try{
Map<String, String> formParam =new HashMap<String,String>();
formParam.put("musicindex", "0");
formParam.put("packindex", "0");
HttpEntity requestHttpEntity = new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8);//对参数进行编码操作
//生成一个post请求对象
httpPost = new HttpPost(url);
httpPost.setHeader("Connection", "close");
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
httpPost.setEntity(requestHttpEntity);
//生成一个http客户端对象
HttpClient httpClient =HttpClientManager.getHttpClient();//发送请求
String result = "";
HttpResponse httpResponse = httpClient.execute(httpPost);//接收响应
int code = httpResponse.getStatusLine().getStatusCode();
if(code==200){
HttpEntity httpEntity = httpResponse.getEntity();//取出响应
//客户端收到响应的信息流
inputStream = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while((line = reader.readLine()) != null){
result = result + line;
}
}
Message msg = handler.obtainMessage(code, result);
msg.sendToTarget();
}catch(SocketTimeoutException e){
if(e.getMessage()!=null){
Message msg = handler.obtainMessage(-101, e.getMessage());
msg.sendToTarget();
}else{
Message msg = handler.obtainMessage(-101, "请求超时");
msg.sendToTarget();
}
}catch(Exception e){
e.printStackTrace();
Message msg = handler.obtainMessage(-1, e.getMessage());
msg.sendToTarget();
}finally{
try {
if(inputStream!=null){
inputStream.close();
}
if(httpPost!=null){
httpPost.abort();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
public static void doGetInThread(final String url,final TaskCallback ajaxCallback)
{
executorService.submit(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
InputStream inputStream = null;//输入流对象
HttpGet httpGet = null;
try{
httpGet = new HttpGet(url);
//生成一个http客户端对象
HttpClient httpClient = HttpClientManager.getHttpClient();
//发送请求
HttpResponse httpResponse = httpClient.execute(httpGet);//接收响应
int code = httpResponse.getStatusLine().getStatusCode();
String result = "";
if(code==200){
HttpEntity httpEntity = httpResponse.getEntity();//取出响应
//客户端收到响应的信息流
inputStream = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while((line = reader.readLine()) != null){
result = result + line;
}
}
ajaxCallback.callback(code,result);
}catch(SocketTimeoutException e){
if(e.getMessage()!=null){
ajaxCallback.callback(-101,e.getMessage());
}else{
ajaxCallback.callback(-101,"请求超时");
}
}catch(Exception e){
e.printStackTrace();
ajaxCallback.callback(-1,e.getMessage());
}finally{
try {
if(inputStream!=null){
inputStream.close();
}
if(httpGet!=null){
httpGet.abort();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
public static void doPostInThread(final String url,final List<NameValuePair> nameValuePairs,final TaskCallback ajaxCallback)
{
executorService.submit(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
InputStream inputStream = null;//输入流对象
HttpPost httpPost = null;
try{
HttpEntity requestHttpEntity = new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8);//对参数进行编码操作
//生成一个post请求对象
httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
httpPost.setEntity(requestHttpEntity);
//生成一个http客户端对象
HttpClient httpClient = HttpClientManager.getHttpClient();//发送请求
String result = "";
HttpResponse httpResponse = httpClient.execute(httpPost);//接收响应
int code = httpResponse.getStatusLine().getStatusCode();
if(code==200){
HttpEntity httpEntity = httpResponse.getEntity();//取出响应
//客户端收到响应的信息流
inputStream = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while((line = reader.readLine()) != null){
result = result + line;
}
}
ajaxCallback.callback(code,result);
}catch(SocketTimeoutException e){
if(e.getMessage()!=null){
ajaxCallback.callback(-101,e.getMessage());
}else{
ajaxCallback.callback(-101,"请求超时");
}
}catch(Exception e){
e.printStackTrace();
ajaxCallback.callback(-1,e.getMessage());
}finally{
try {
if(inputStream!=null){
inputStream.close();
}
if(httpPost!=null){
httpPost.abort();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
//回调接口
public interface TaskCallback
{
public void callback(int code,String json);
}
}