asynchttpclient 在runnable 里面执行不成功

Joyce_ZhuRouRou 2014-02-25 09:41:38
使用asynchttpclient 向服务器异步请求数据(上传和下载等):

	public void downloadFile(String url ,String local) {
File saveto = new File(local);

AsyncHttpResponseHandler handler = new MyResponseHandler(saveto);

this.mHttpClient.get(this.mContext, url, handler);
}



但是由于服务器同时最多接收10请求,将以上代码修改为:
	public void downloadFile(String name, String remote, String local) {
File saveto = new File(local);
TransferItem.TransferType type = TransferItem.TransferType.Download;
TransferItem trans = new TransferItem(name, type);
AsyncHttpResponseHandler handler = new MyResponseHandler(saveto, trans);

GetRequest request = new GetRequest(this.mContext, remote, hanlder, taskqueue);
request.run();
}

private class GetRequest implements Runnable {
private Context mContext;
private String url;
private AsyncHttpResponseHandler mHandler;
private ArrayBlockingQueue<Integer> queue;
public GetRequest(Context c,String url, AsyncHttpResponseHandler hanlder,ArrayBlockingQueue<Integer> q){
this.mContext = c;
this.url = url;
this.mHandler = handler;
this.queue = q;
}

@Override
public void run() {
// TODO Auto-generated method stub
queue.take();
this.mHttpClient.get(this.mContext, this.url, this.handler);
}

}


其中 taskqueue 初始化为:
		private ArrayBlockingQueue<Integer> taskqueue = new ArrayBlockingQueue<Integer>(10);
for(int i = 0; i< 10;i++)
{
taskqueue.put(i);
}


GetRequest的run方法里面当taskqueue的take返回(当前任务不超出10个,否则阻塞),就调this.mHttpClient.get(this.mContext, this.url, this.handler);进行数据访问操作,但是发现这里面get方法好像都没有执行到,因为从打印看AsyncHttpResponseHandler里面的方法都没有执行到:
		public void onStart() {
super.onStart();
}

@Override
public void onProgress(int send, int total) {
super.onProgress(send, total);
}

@Override
public void onSuccess(int code, Header[] headers, byte[] data) {
super.onSuccess(code, headers, data);
}
@Override
public void onFailure(int code,
Header[] headers, byte[] body, Throwable error) {
super.onFailure(code, headers, body, error);
}


请问这是为什么?是get和post这些方法需要在UI线程里面操作码?如果是的话,应该要怎么做呢?麻烦有经验的大牛们指点一下,谢谢。
...全文
143 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Birds2018 2014-02-26
  • 打赏
  • 举报
回复
   GetRequest request = new GetRequest(this.mContext, remote, hanlder, taskqueue);    Thread t = new Thread(request ); //放到线程里面 t.start(); queue.take(); 这个是阻塞 检查是不是ArrayBlockingQueue<Integer> 里面没元素。你说你的get没有执行。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧