目前我使用的是运行3秒钟的Android操作系统处理程序。问题是我不知道网络操作实际需要多长时间。有没有办法在只删除200条消息时停止进度对话框?
处理程序:
new android.os.Handler().postDelayed(
() -> {
// On complete call delete contact method
deleteAllMsgs(progressDialog);
// onLoginFailed();
}, 3000);
方式:
private void deleteAllMsgs(ProgressDialog progressDialog) {
ParseQuery<ParseObject> msgQuery= new ParseQuery<>(ParseConstants.CLASS_MESSAGE);
// Query the Comment class for comments that have a "author" column value equal to the objectId of the current User
msgQuery.whereEqualTo((ParseConstants.KEY_SENDER_AUTHOR_POINTER), ParseUser.msgQuery());
yeetQuery.setLimit(200);
msgQuery.findInBackground((messages, e) -> {
if (e == null) {
// Iterate over all messages
for (ParseObject delete : messages) {
// Delete messages from local data store
try {
delete.unpin();
} catch (ParseException e1) {
e1.printStackTrace();
}
// Delete messages from Parse
delete.deleteInBackground();
}
// Return to main screen
Toast.makeText(getApplicationContext(), "200 messages deleted", Toast.LENGTH_SHORT).show();
finish();
} else {
Log.e("Error", e.getMessage());
}
});
}
答案 0 :(得分:1)
SELECT COUNT(DISTINCT e.products_id)
FROM product_eans e
inner join products p on e.products_id = p.id
WHERE e.ean LIKE '%4788%'
OR p.name LIKE '%4788%'
您可以在asynctask方法中尽可能多地使用runOnUiThread方法。有了这个,您可以发送toast消息,设置textview的文本等...
答案 1 :(得分:1)
您必须使用Asynch任务方法,而不是使用OS处理程序,在此处引用https://www.concretepage.com/android/android-asynctask-example-with-progress-bar。
这里不一定要使用&#34; progressUpdate()&#34;,如果不这样做,你也可以这样做。
所以你可以将progressdialog初始化为&#34; preExecute()&#34;,
然后把你的&#34; deleteAllMessage()&#34;在doInBackguound()和
中任务完成后,它会自动跳转到&#34; postExecute()&#34;。
所以你可以停止显示进度条。致电:
progressdialog.stop()
答案 2 :(得分:1)
只有在删除了200条消息后才能停止进度对话框吗?
是的,您需要正确使用Parse的回调。
在for循环之后立即将
对于ParseQuery.findInBackground或者deleteInBackground,你不需要Handler或Asynctask
此外,您应该使用带有回调的public class MissingIdentifier {
protected String Identifier;
protected Date from;
protected Date to;
@Override
public String toString()
{
return Identifier + from + to;
}
@Override
public boolean equals(MissingIdentifier other)
{
if (this.toString == other.toString) return true;
return false;
}
来了解何时删除对象列表而不必先找到它们