Jak pobrać plik z serwera i zapisać go w określonym folderze na karcie SD w systemie Android?

Mam jedno wymaganie w mojej aplikacji na Androida. Muszę programowo pobrać i zapisać plik w określonym folderze karty SD. Opracowałem kod źródłowy, który jest

String DownloadUrl = "http://myexample.com/android/";
     String fileName = "myclock_db.db";

    DownloadDatabase(DownloadUrl,fileName);

    // and the method is

public void DownloadDatabase(String DownloadUrl, String fileName) {
    try {
        File root = android.os.Environment.getExternalStorageDirectory();
        File dir = new File(root.getAbsolutePath() + "/myclock/databases");
        if(dir.exists() == false){
             dir.mkdirs();  
        }

        URL url = new URL("http://myexample.com/android/");
        File file = new File(dir,fileName);

        long startTime = System.currentTimeMillis();
        Log.d("DownloadManager" , "download url:" +url);
        Log.d("DownloadManager" , "download file name:" + fileName);

        URLConnection uconn = url.openConnection();
        uconn.setReadTimeout(TIMEOUT_CONNECTION);
        uconn.setConnectTimeout(TIMEOUT_SOCKET);

        InputStream is = uconn.getInputStream();
        BufferedInputStream bufferinstream = new BufferedInputStream(is);

        ByteArrayBuffer baf = new ByteArrayBuffer(5000);
        int current = 0;
        while((current = bufferinstream.read()) != -1){
            baf.append((byte) current);
        }

        FileOutputStream fos = new FileOutputStream( file);
        fos.write(baf.toByteArray());
        fos.flush();
        fos.close();
        Log.d("DownloadManager" , "download ready in" + ((System.currentTimeMillis() - startTime)/1000) + "sec");
        int dotindex = fileName.lastIndexOf('.');
        if(dotindex>=0){
            fileName = fileName.substring(0,dotindex);

    }
    catch(IOException e) {
        Log.d("DownloadManager" , "Error:" + e);
    }

}

Teraz problemem jest tylko pusty plik o nazwie myclock_db.db zapisuje w ścieżce. ale muszę pobrać i zapisać zawartość pliku w określonym folderze. Próbowałem na kilka sposobów pobrać plik, ale nie mogę.

Author: halfer, 2013-04-20

1 answers

Twój adres URL pobierania nie jest łączem do żadnego pliku. To katalog. Upewnij się, że jest to plik i istnieje. Sprawdź również w oknie logcat dzienniki błędów. Jeszcze jedna sugestia, zawsze lepiej jest zrobić printStackTrace() w blokach catch zamiast logów. Jego daje bardziej szczegółowy widok błędu.

Zmień tę linię:

    URL url = new URL("http://myexample.com/android/");

Do:

    URL url = new URL("http://myexample.com/android/yourfilename.txt"); //some file url

Następny, w bloku catch, dodaj tę linię:

e.printStackTrace();

Również w ścieżce katalogu powinno być coś w rodzaju to:

File dir = new File(root.getAbsolutePath() + "/mnt/sdcard/myclock/databases");

Zamiast

File dir = new File(root.getAbsolutePath() + "/myclock/databases");

Następnie upewnij się, że uzyskałeś pozwolenie na zapis do pamięci zewnętrznej w manifeście Androida.

 15
Author: shiladitya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-20 05:56:09