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

Прогресс отображается правильно, но видео не отображается в каталоге.

Спасибо.


person Syeda Zunaira    schedule 11.04.2016    source источник
comment
Вы добавили разрешение на запись в хранилище?   -  person Prerak Sola    schedule 11.04.2016
comment
Да, я сделал, но не повезло.   -  person Syeda Zunaira    schedule 11.04.2016
comment
video is not showing in directory.. Как вы смотрите в этом каталоге? И каков полный путь к этому каталогу?   -  person greenapps    schedule 11.04.2016
comment
Have you added the permission to write to the storage. Для этого каталога не требуется никаких разрешений.   -  person greenapps    schedule 11.04.2016
comment
это путь к файлу:/data/data/com.rev.rev/cache/Gold -en.mp4 кроме того, что я искал и в других местах. с именем файла.   -  person Syeda Zunaira    schedule 12.04.2016


Ответы (1)


Так что в моем коде нет проблемы, кроме пути. Спасибо @greenapps, которые заставили меня задуматься о пути/каталоге.

По сути, я просто меняю путь на реальный вместо кеша, и да, вот видео.

Изменил эту строку

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

к этому

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

Спасибо @greenapps за подсказку.

person Syeda Zunaira    schedule 12.04.2016
comment
Вы не должны жестко кодировать "/sdcard". Вам также следует рассмотреть возможность удаления разрешения WRITE_EXTERNAL_STORAGE, так как это опасное разрешение на Android 6.0+. - person Jared Rummler; 12.04.2016
comment
вместо этого используйте Environment.getExternalStorageDirectory().getPath(). Жесткое кодирование "/sdcard" будет работать на большинстве устройств, но, скорее всего, это символическая ссылка, которая может отсутствовать на некоторых устройствах. - person Jared Rummler; 12.04.2016
comment
а как быть с теми устройствами на которых не работает? - person Syeda Zunaira; 12.04.2016
comment
используйте 1_ - person Jared Rummler; 12.04.2016