FileNotFoundException auf Android > 2.3

Ich versuche, eine Datei herunterladen, auf SD-Karte auf meinem Handy. Auf Android 2.1, 2.2 und 2.3 funktioniert alles wie vorgesehen, aber auf Android 4.0 (testen auf dem emulator und meinem Galaxy Nexus) es wirft ein FileNotFoundException.

Stacktrace:

02-27 21:49:06.733: W/System.err(27648): java.io.FileNotFoundException: http://www.wdr.de/wdrlive/media/wdr5.m3u
02-27 21:49:06.733: W/System.err(27648):    at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
02-27 21:49:06.733: W/System.err(27648):    at de.arvidg.test.StartActivity$9.run(StartActivity.java:833)
02-27 21:49:06.733: W/System.err(27648):    at java.lang.Thread.run(Thread.java:856)

Meine Methode für den Download-Datei:

downloadFile("http://www.wdr.de/wdrlive/media/wdr5.m3u");

    public void downloadFile(final String fileUrl) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {

                    URL url = new URL(fileUrl);

                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

                    urlConnection.setRequestMethod("GET");
                    urlConnection.setDoOutput(true);

                    urlConnection.connect();

//                 File cacheDir = appContext.getExternalCacheDir();
//                 File file = new File("/mnt/sdcard", "/cacheFile.ext");
                    File SDCardRoot = Environment.getExternalStorageDirectory();
                    File file = new File(SDCardRoot,"/cacheFile.ext");

                    if(!file.exists()) file.createNewFile();

                    FileOutputStream fileOutput = new FileOutputStream(file);

                    InputStream inputStream = urlConnection.getInputStream();

                    int totalSize = urlConnection.getContentLength();
                    int downloadedSize = 0;

                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;

                    while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                        fileOutput.write(buffer, 0, bufferLength);
                        downloadedSize += bufferLength;
                        Log.d(TAG, "downloadedSize = " + downloadedSize + " | totalSize = " + totalSize);
//                     updateProgress(downloadedSize, totalSize);

                    }
                    fileOutput.close();

            } catch (MalformedURLException e) {
                    e.printStackTrace();
            } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }).start();
    }
  • Es ist nicht das, was verursacht dein problem, aber man sollte nicht mit einem absoluten Datei-Namen für die cache-Datei. Versuchen Sie dies: File file = new File(SDCardRoot,"cacheFile.ext"); (beachten Sie das fehlen des "/").
  • Ok, vielen Dank. Tun es sicher. Jemand Ahnung wo der Fehler herkommt?
  • Überprüfen Sie den response-code urlConnection.getResponseCode(); vor Prozess-input-stream.
  • Schön. Danke. 405 - Methode nicht erlaubt. Gibt es eine andere download-Nachricht ("GET" dont scheint zu funktionieren).
  • Versuchen Sie, einen Kommentar unter dieser string urlConnection.setRequestMethod("GET"); in deinem code.
  • Yury: Die gleichen Fehler. urlConnection.getRequestMethod() gibt nur POST. Ich glaube, ich habe zu Leben, dass I cant get die Datei. Ist es möglich, öffnen Sie die Datei und rufen Sie Inhalt?
  • Die seltsame Sache ist, dass es funktioniert auf Android 2.2. 😀
  • Einige schlagen vor, mit Hilfe von apache httpClient es beheben kann,nicht sicher, ob es funktioniert in deinem Fall hier ICS, Wert zu check it out

InformationsquelleAutor Leandros | 2012-02-27
Schreibe einen Kommentar