2014-02-20 2 views
0

Я следовал инструкциям, мне здесь (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; 

    } 
} 


} 

Так где я могу поставить код, чтобы обрабатывать все другие вещи, как прогресс и \ или закрытие диалогового окна, когда оно закончилось?

ответ

0

переместить код для строки состояния внутри загрузки класса задач с использованием OnPreExecute

@Override 
protected void onPreExecute() { 
....progressbar code 
} 

затем закрыть его на onPostExecute с распускать

@Override 
protected void onPostExecute() { 
    mProgressDialog.dismiss(); 

}

+0

Вы говорите, это идет в "doInBackground"? –

+0

да в том же классе – BradR

+0

О, в пределах того же класса, теперь в пределах doInBackground. Он работает, но он не видит mProgressDialog. –

Смежные вопросы