我使用AsyncTask从服务器下载数据,我想将数据插入到我的数据库中。我在哪里放置插入代码,如果用户按下Home按钮,如何阻止AsyncTask插入数据?
我目前正在使用asynctask.cancel(true)
,但我无法停止数据库插入。
public class TalkToServer extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// show progress dialog
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
@Override
protected String doInBackground(String... params) {
//download data from the server
return something;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// dismiss dialog
}
}
答案 0 :(得分:1)
最好的选择是在onPostExecute()
中执行数据库插入操作。
如果取消AsyncTask
,则不会调用onPostExecute()
。
来自The Documentation for AsyncTask.cancel():
调用此方法将导致调用onCancelled(Object) 在doInBackground(Object [])返回后的UI线程上。打电话给这个 方法保证永远不会调用onPostExecute(Object)。后 调用此方法时,应检查返回的值 isCancelled()定期从doInBackground(Object [])来完成 尽早完成任务。
您还可以在isCancelled()
方法中为doInBackground()
添加支票。
@Override
protected String doInBackground(String... params) {
//download data from the server
if (isCancelled()){
//Prevent data from being inserted in the database
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
//Dismiss ProgressDialog
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return something;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// dismiss dialog
//Insert data into database
}
答案 1 :(得分:0)
首先,您开始从doInBackground(String... params)
然后在onPostExecute(String result)
方法内编写数据库插入逻辑,并在其末尾关闭数据库。
如果用户按下主页按钮(它将自动取消您的AsyncTask),最后完成您的活动
希望它有意义......
答案 2 :(得分:0)
Create new class which contains data insertion function.
Ex -
//create new class
public class DBInsert(){
//write data insertion login in this function.
public string insertData(){
......
......
}
}
//your async task.
public class TalkToServer extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// show progress dialog
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
@Override
protected String doInBackground(String... params) {
//download data from the server
//Call db insert function.
DBInsert.insertData();
return something;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// dismiss dialog
}
}