2016-04-11 25 views
0

私はサーバーからビデオをダウンロードするためにokhttpを使用しています。エラーも例外ではありませんが、ファイルはどこでもダウンロードされているわけではありません。okhttpはファイルをダウンロードしていません

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; 
         } 

進捗状況が正しく表示されますが、ビデオはディレクトリに表示されていません。ここで

はコードです。

ありがとうございました。

+0

ストレージに書き込む権限を追加しましたか? –

+0

ええ、私は運がなかった。 –

+0

'ビデオがディレクトリに表示されていません。あなたはどのようにそのディレクトリを見ていますか?そしてそのディレクトリの完全なパスは何ですか? – greenapps

答えて

0

私のコードに問題はありませんが、パスです。パス/ディレクトリについて考えさせてくれてありがとう@greenapps。

基本的には、キャッシュの代わりに実際のパスに変更するだけです。ここでビデオがあります。

は手がかりのために、この

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

ありがとう@greenappsにこのライン

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

を変更しました。

+0

''/sdcard ''をハードコードするべきではありません。また、WRITE_EXTERNAL_STORAGE権限を削除することも検討する必要があります。これは、Android 6.0以降では「危険な」権限であるためです。 –

+0

大丈夫です。しかし、なぜ ? –

+1

では代わりに 'Environment.getExternalStorageDirectory()。getPath()'を使用します。 ''/sdcard ''のハードコーディングは大部分のデバイスで動作しますが、シンボリックリンクの可能性が高く、一部のデバイスには存在しない可能性があります。 –

関連する問題