2012-04-11 15 views
5

Używam następujący kod do pobrania pliku w Androidzie:Pobieranie plików w Androidzie

public class FileDownloadActivity extends Activity { 
    ProgressDialog mProgressDialog; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mProgressDialog = new ProgressDialog(FileDownloadActivity.this); 
     mProgressDialog.setMessage("Downlaoding File..."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.setMax(100); 
     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 

     // execute this when the downloader must be fired 
     DownloadFile downloadFile = new DownloadFile(); 
     downloadFile.execute("http://code.google.com/android/goodies/wallpaper/android-wallpaper5_1024x768.jpg"); 
    } 

    private class DownloadFile extends AsyncTask<String, Integer, String> { 
     @Override 
     protected String doInBackground(String... sUrl) { 
      try { 
       Log.i("","In doin bggggggggggggg"); 
       URL url = new URL(sUrl[0]); 
       URLConnection connection = url.openConnection(); 
       connection.connect(); 

       // this will be useful so that you can show a typical 0-100% progress bar 
       int fileLength = connection.getContentLength(); 
       // download the file 
       InputStream input = new BufferedInputStream(url.openStream()); 
       OutputStream output = new FileOutputStream("/sdcard/sample.jpg"); 
       byte data[] = new byte[1024]; 
       long total = 0; 
       int count; 
       while ((count = input.read(data)) != -1) { 
        total += count; 
        // publishing the progress.... 
        publishProgress((int) (total * 100/fileLength)); 
        output.write(data, 0, count); 
       } 
       output.flush(); 
       output.close(); 
       input.close(); 
      } catch (Exception e) { 

      } 
      return null; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      mProgressDialog.show(); 
     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 
      super.onProgressUpdate(progress); 
      mProgressDialog.setProgress(progress[0]); 
     } 
    } 
} 

To tylko pokazuje mi 0% postęp dla minionego pół godziny.

ja hav nawet dodaje

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 

w jawnym a nawet Internet działa dobrze w moim telefonie.

Proszę o pomoc.

Dzięki
Sneha

+0

Jeśli umieścisz punkt przerwania w 'onProgressUpdate' i uruchomisz w trybie debugowania, czy zatrzyma się on w twoim punkcie przerwania? –

+0

zawierają logcat ... jak to się nie udaje? Co idzie źle? – TryTryAgain

+2

Jeśli zamierzasz przechwycić 'wyjątek' i nic z nim nie zrobić, powinieneś przynajmniej go zarejestrować:' Log.error ("FileDownload", e) '. – Nick

Odpowiedz

0

Domyślam się, że „connection.getContentLength()” jest zawodna przez HTTP i zwraca 0, więc pewnie coraz podzielić przez zero wyjątku. A ponieważ nie zalogujesz wyjątek nie widzę nic w logcat i żadnego postępu ..

0

Jeżeli minimalny poziom SDK jest 9, rzucić okiem na this class

0

lib będzie pomóc

https://github.com/AriaLyy/Aria

pobierz plik tylko jeden kod

Aria.download(this) 
    .load(DOWNLOAD_URL) 
    .setDownloadPath(DOWNLOAD_PATH) //file save path 
    .add(); 

stan get pobieranie

Powiązane problemy