Я следовал инструкциям, мне здесь (1. AsyncTask):Android - Закрытие Бар Прогресс После завершения резьбы
Download a file with Android, and showing the progress in a ProgressDialog
И это работает в точку. Появится загрузка файлов (с использованием моего собственного кода загрузки) и диалогового окна разработки. Отлично. Проблема только в том, что диалог не закрывается, когда код выполнен. Вероятно, это потому, что я не могу работать onPreExecute. Я не совсем уверен, где это выразить. В любом месте кода он вызывает ряд ошибок. Позвольте мне после того, что код, который я в настоящее время:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
c = this;
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
double getWidth = size.x * 0.9;
scWidth = (int)getWidth;
cWhite = getResources().getColor(R.color.white);
cBlack = getResources().getColor(R.color.black);
cTrans = getResources().getColor(R.color.transparent);
cBlue = getResources().getColor(R.color.blue);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
version = sharedPreferences.getString("version", "0.1");
Editor editor = sharedPreferences.edit();
editor.putString("area", "Home");
editor.commit();
setContentView(R.layout.activity_main);
setupDrawer();
if(sharedPreferences.getString("new", "Yes").equals("Yes")){
loadFiles();
}
private void loadFiles(){
if(isNetworkAvailable() == true){
ProgressDialog mProgressDialog;
// instantiate it within the onCreate method
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading files...");
mProgressDialog.setIndeterminate(true);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(true);
// execute this when the downloader must be fired
final DownloadTask downloadTask = new DownloadTask(this);
downloadTask.execute();
mProgressDialog.show();
mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
downloadTask.cancel(true);
}
});
}else{
new AlertDialog.Builder(this)
.setTitle("No internet detected")
.setMessage("Must have internet access to download files.")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(c);
if(sharedPreferences.getString("new", "Yes").equals("Yes")){
((Activity) c).finish();
}
}
})
.show();
}
}
Затем на дне в новом классе у меня есть:
private class DownloadTask extends AsyncTask<Integer, Void, Void> {
private Context context;
private PowerManager.WakeLock mWakeLock;
public DownloadTask(Context context) {
this.context = context;
}
@Override
protected Void doInBackground(Integer... sUrl) {
DataClass dc = new DataClass(c);
//ArrayList<String> menuArray = dc.getMenuArray("Home");
String[] menuArray = {"Home", "Announcements", "Speakers", "Events", "Exhibitors", "Agenda", "Hotels", "Documents"};
File dir = getDir("myDir", Context.MODE_PRIVATE);
for(int i=1; i <= 7; i++){
String[] menuList = handleMenuInfo(menuArray[i]);
for(int i2=1; i2 < menuList.length; i2++){
File file = new File(dir, menuArray[i] + "/" + menuList[i2] + ".txt");
ArrayList<String> viewArray = dc.getInfoArray(menuArray[i],menuList[i2]);
writeToFile(file, viewArray);
}
}
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(c);
Editor editor = sharedPreferences.edit();
editor.putString("new", "No");
editor.commit();
return null;
}
}
}
Так где я могу поставить код, чтобы обрабатывать все другие вещи, как прогресс и \ или закрытие диалогового окна, когда оно закончилось?
Вы говорите, это идет в "doInBackground"? –
да в том же классе – BradR
О, в пределах того же класса, теперь в пределах doInBackground. Он работает, но он не видит mProgressDialog. –