2016-04-11 10 views
0

Ich verwende okhttp zum Herunterladen von Video vom Server. Es gibt keinen Fehler, keine Ausnahme, aber die Datei wird nicht überall heruntergeladen, aber es scheint so zu sein. Hierokhttp nicht herunterladen der Datei

ist der Code:

OkHttpClient httpClient = new OkHttpClient(); 
Call call = httpClient.newCall(new Request.Builder().url("http://res.cloudinary.com/demo/video/upload/v1427018743/ygzxwxmflekucvqcrb8c.mp4").get().build()); 
try { 
     File file = new File(getCacheDir(), user_Videos.get(i).video_title+ ".mp4"); 
     OutputStream out = new FileOutputStream(file); 
     Response response = call.execute(); 
     if (response.code() == 200) { 
      InputStream inputStream = null; 
      try { 
       inputStream = response.body().byteStream(); 
       byte[] buff = new byte[1024 * 8]; 
       long downloaded = 0; 
       long target = response.body().contentLength(); 

       publishProgress(0L, target); 
       while (true) { 
         int readed = inputStream.read(buff); 
         if (readed == -1) { 
          break; 
             } 
          //write buff 
        downloaded += readed; 

       try { 
        out.write(buff,0,readed); 

        } catch (Exception e) { 
         e.printStackTrace(); 
             } 
        publishProgress(downloaded, target); 
        if (isCancelled()) { 
              return false; 
             } 
            } 
            return downloaded == target; 
           } catch (IOException ignore) { 
            return false; 
           } finally { 
            if (inputStream != null) { 
             out.flush(); 
             out.close(); 
             inputStream.close(); 
            } 
           } 
          } else { 
           return false; 
          } 
         } catch (IOException e) { 
          e.printStackTrace(); 
          return false; 
         } 

Der Fortschritt zeigt richtig, aber Video zeigt nicht im Verzeichnis.

Danke.

+0

Haben Sie die Berechtigung zum Schreiben in den Speicher hinzugefügt? –

+0

Ja, ich habe aber kein Glück. –

+0

'Video wird nicht im Verzeichnis angezeigt.'. Wie schaust du in dieses Verzeichnis? Und was ist der vollständige Pfad dieses Verzeichnisses? – greenapps

Antwort

0

So gibt es kein Problem in meinem Code, sondern den Pfad. Danke @greenapps, die mich über Pfad/Verzeichnis nachdenken ließen.

Im Grunde ändere ich nur den Pfad zu einem echten statt Cache und yup hier ist das Video.

diese Zeile geändert

File file = new File(getCacheDir(), user_Videos.get(i).video_title + ".mp4"); 

zu diesem

File file = new File(Environment.getExternalStorageDirectory(), user_Videos.get(i).video_title+ ".mp4"); 

Dank @greenapps für den Hinweis.

+0

Sie sollten ''/sdcard '' nicht fest codieren. Sie sollten auch erwägen, die Berechtigung WRITE_EXTERNAL_STORAGE zu entfernen, da dies eine "gefährliche" Berechtigung für Android 6.0+ ist. –

+0

okay. Aber warum ? –

+1

verwenden Sie stattdessen 'Environment.getExternalStorageDirectory(). GetPath()'. Hardcoding '"/sdcard "' funktioniert auf den meisten Geräten, aber es ist höchstwahrscheinlich ein symbolischer Link und möglicherweise nicht auf einigen Geräten vorhanden. –