我在Android Studio中有以下Asyntask。
不过,我正在努力让进度条工作,进度条弹出,但随后立即消失。我想知道:
为什么它不等待
DoInBackground
中的任务完成后才消失?
如有任何建议,不胜感激。我是一个初学者,所以请原谅这个愚蠢的问题,如果它确实是一个愚蠢的问题。 sqlite数据库谢谢。DoInBackground
中的任务是对截击请求的调用,该请求将数据从远程sql数据库复制到设备public class AsyncTask extends android.os.AsyncTask<Integer, Integer, String> {
ProgressBar pb;
int status = 0;
public void setProgressBar(ProgressBar progressBar) {
this.pb = progressBar;
}
@Override
protected void onPreExecute() {
Log.d(TAG, "zzzzz2: " + "Pre");
pb.setVisibility(View.VISIBLE);
super.onPreExecute();
}
@Override
protected String doInBackground(Integer[] objects) {
Log.d(TAG, "zzzzz2: " + "DoIn");
// if user doesnt exist in db add to server db
String strUser = mFirebaseUser.getUid();
String strDisplayName = mFirebaseUser.getDisplayName();
String strEmail = mFirebaseUser.getEmail();
clsServerClass.addUserToServer(strUser, strDisplayName, strEmail, context);
// load 12 tables into sqlite database
clsServerClass.copyTblVersions(context);
clsServerClass.copyAnimalClassTable(context);
clsServerClass.copyAnimalGroupTable(context);
clsServerClass.copyAnimalTable(context);
clsServerClass.copyTblSeasons(context);
clsServerClass.copyRegions(context);
clsServerClass.copyCountries(context);
clsServerClass.copyProvinces(context);
clsServerClass.copyHotspots(context);
clsServerClass.copyHabitats(context);
clsServerClass.getMyPlaces(strUser, context);
clsServerClass.getSightingsUser(strUser, context);
Cursor cntry = getCsr("animal_unique_key", "tbl_lookup_animals");
Log.d(TAG, "yyyya: " + cntry.getCount());
JSONArray arrayList1 = createListArray("animal_class_key", 1);
createListSharedPref("List1_name", "List 1: All birds", "List1_where", arrayList1);
JSONArray arrayList2 = createListArray("animal_class_key", 2);
createListSharedPref("List2_name", "List 2: All Mammals", "List2_where", arrayList2);
JSONArray arrayList3 = createListArray("animal_class_key", -99);
createListSharedPref("List3_name", "List 3: All Animals", "List3_where", arrayList3);
JSONArray arrayList4 = createListArray("animal_class_key", 3);
createListSharedPref("List4_name", "List 4: All Reptiles", "List4_where", arrayList4);
JSONArray arrayList5 = createListArray("animal_class_key", 4);
createListSharedPref("List5_name", "List 5: All Amphibians", "List5_where", arrayList5);
return null;
}
@Override
protected void onProgressUpdate(Integer[] values) {
Log.d(TAG, "zzzzz3: " + "Update");
pb.setProgress(values[0]);
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String s) {
Log.d(TAG, "zzzzz2: " + "post");
pb.setVisibility(View.GONE);
super.onPostExecute(s);
}
}
问题在于onProgressUpdate方法
文档
onProgressUpdate((:此方法从接收进度更新通过publishProgress方法发布的doInBackground方法,并且该方法可以使用该进度更新来更新UI线程
由于您没有向onProgressUpdate传递任何值,您的进度条将立即消失。
Log.d(TAG, "zzzzz2: " + "DoIn");
之后的IndoBackground方法
添加
publishProgress(5); // Calls onProgressUpdate()
//5 is just an example integer
现在,它应该可以正常工作了。
要了解有关如何更好地使用onProgressUpdate((的更多信息,请参阅https://www.tanelikorri.com/tutorial/android/asynctask-tutorial/