2014-11-21 7 views
0

Я использую учебник для создания класса загрузки, и он использует диалог прогресса. Методы show и dissmiss находятся в защищенных классах внутри класса asynchTask. IDE говорит мне, что не может их решитьМожете ли вы показать мне, почему эти методы недоступны?

public class DownloadHandler { 

    private Context mContext; 
    public String filename; 
    private String remotePath; 

    public static final int DIALOG_DOWNLOAD_PROGRESS = 0; 
    private ProgressDialog mProgressDialog; 

    public DownloadHandler(String rp, String f, Context c) throws Exception { 
    mContext = c; 
    remotePath = rp; 
    filename = f; 
} 

private void startDownload() { 
    String url = "http://example.com/"+remotePath+"/"+filename+".pdf"; 
    new DownloadFileAsync().execute(url); 
} 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case DIALOG_DOWNLOAD_PROGRESS: 
      mProgressDialog = new ProgressDialog(mContext); 
      mProgressDialog.setMessage("Downloading file.."); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mProgressDialog.setCancelable(false); 
      mProgressDialog.show(); 
      return mProgressDialog; 
     default: 
      return null; 
    } 
} 

class DownloadFileAsync extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

//===================showDialog can not be resolved============================ 

     showDialog(DIALOG_DOWNLOAD_PROGRESS); 
//======================================================================== 

    } 

    @Override 
    protected String doInBackground(String... aurl) { 
     int count; 

     try { 

      URL url = new URL(aurl[0]); 
      URLConnection conexion = url.openConnection(); 
      conexion.connect(); 

      int lengthOfFile = conexion.getContentLength(); 

      InputStream input = new BufferedInputStream(url.openStream()); 
      //write it to the internal storage 

      OutputStream output = new FileOutputStream(filename+".pdf"); 


      byte data[] = new byte[1024]; 

      long total = 0; 

      while ((count = input.read(data)) != -1) { 
       total += count; 
       publishProgress(""+(int)((total*100)/lengthOfFile)); 

       output.write(data, 0, count); 
      } 

      output.flush(); 
      output.close(); 
      input.close(); 
     } catch (Exception e) {} 
     return null; 

    } 
    protected void onProgressUpdate(String... progress) { 
     Log.d("ANDRO_ASYNC",progress[0]); 
     mProgressDialog.setProgress(Integer.parseInt(progress[0])); 
    } 

    @Override 
    protected void onPostExecute(String unused) { 
//=========dismissDialog can not be resolved ================== 

     dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
//============================================================= 
    } 
} 

} 

Это связано с защищенным классом?

+1

Я не вижу эти методы в документации по API (http://developer.android.com/reference/android/os/AsyncTask .html) –

+0

Ну, я не знаю. Так было написано в учебнике. Теперь, когда я сделал прямую копию и вставлю без каких-либо модов, моя среда IDE утверждает, что эти методы устарели. – silversunhunter

+1

Связать со учебником –

ответ

0

showDialog и dismissDialog находятся в классе Activity. В учебнике показано, что класс Download расширяет активность, которую затем может использовать внутренний класс.

Иметь Download продлить Activity. Что касается устаревших методов, это связано с тем, что вы должны использовать DialogFragment. По-видимому, учебник, за которым вы следуете, устарел, и вы должны посмотреть в how to use a DialogFragment