我想通过http发送一些数据在一个按钮点击,每次用户点击按钮一些数据应该添加到队列中,然后它将通过http发送,得到响应后,我想从队列中删除它,然后在队列中做同样的下一个项目。
我知道如何将项目添加到队列中,我尝试了异步任务调用http。问题是,如果用户多次点击按钮,我怎么能确保队列中的下一个项目不会被调用,直到第一个http完成。如果应用程序也在后台,我希望操作能够完成。
这是doInBackground方法中的Async代码:@Override
protected Boolean doInBackground(Void... params) {
try {
msgResponseIS = getInputStream(generatedLink);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (msgResponseIS != null){
BufferedReader r = new BufferedReader(new InputStreamReader(
msgResponseIS));
StringBuilder total = new StringBuilder();
String line;
try {
while ((line = r.readLine()) != null) {
total.append(line);
}
setResponseValue(total.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;}
else
return false;
}
1。在预执行函数中,您可以像这样设置可点击属性。
Button.setClickable(假)
2. 在调用doInBackground之后,调用post execute方法并将clickable设置为true。
Button.setClickable(真正的);
当请求被称为do myButton.setEnabled(false);
时,当http请求完成时,您可以执行
myButton.setEnabled(true);
其中myButton
是调用异步任务的按钮。这样就可以保证只要异步任务在运行,用户就不能使用这个按钮。
EDIT:另一种方法是制作boolean free = ture;
标志。当按钮被点击,然后只需设置标志为free = false;
,并做一个检查。