Fetch: как скачивать файлы?

Я пытаюсь использовать Получить библиотеку для своего приложения для Android для загрузки файлов с сервера.

Я использую приведенный ниже код, который скопирован из примера fetch github:

public class MainActivity extends AppCompatActivity {
    private Fetch fetch;
    Request request;
    Button download;
    String url = "https://www.google.co.in/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
    String file = "/Download/image.png";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        download = findViewById(R.id.button);
        download.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FetchConfiguration fetchConfiguration = new FetchConfiguration.Builder(MainActivity.this)
                        .setDownloadConcurrentLimit(3)
                        .build();
                fetch= Fetch.Impl.getInstance(fetchConfiguration);
                request = new Request(url,file);
                request.setPriority(Priority.HIGH);
                request.setNetworkType(NetworkType.ALL);
                fetch.enqueue(request,updatedRequest -> {
                    //something
                },error -> {
                    //somethig
                });
            }
        });
    }
} 

но когда я нажимаю кнопку загрузки, это ошибка, которую мне показал logcat:

    09-17 14:07:36.522 27133-27133/rahul.gaur.test1 E/Process: android_os_Process_getProcessNameByPid pid is 27133
    android_os_Process_getProcessNameByPid value is ahul.gaur.test1
09-17 14:07:43.012 27133-27365/rahul.gaur.test1 E/LibGlobalFetchLib: FileDownloader download:DownloadInfo(id=1284541380, 

namespace='LibGlobalFetchLib', url='https://www.google.co.in/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', 

file='/Download/image.png', group=0, priority=HIGH, headers = {}, downloaded=0, total=5969, status=QUEUED, 

error=NONE, networkType=ALL, created=1537173461169, tag=null, enqueueAction=REPLACE_EXISTING, identifier=0, 

downloadOnEnqueue=true, extras = {})
    java.io.FileNotFoundException: /Download/image.png: open failed: ENOENT (No such file or directory)
        at libcore.io.IoBridge.open(IoBridge.java:456)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:117)
        at com.tonyodev.fetch2.downloader.SequentialFileDownloaderImpl$run$1.<init>(SequentialFileDownloaderImpl.kt:92)
        at com.tonyodev.fetch2.downloader.SequentialFileDownloaderImpl.run(SequentialFileDownloaderImpl.kt:90)
        at com.tonyodev.fetch2.downloader.DownloadManagerImpl$start$$inlined$synchronized$lambda$1.run

(DownloadManagerImpl.kt:97)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1115)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:590)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
        at libcore.io.Posix.open(Native Method)
        at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
        at libcore.io.IoBridge.open(IoBridge.java:442)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:117) 
        at com.tonyodev.fetch2.downloader.SequentialFileDownloaderImpl$run$1.<init>(SequentialFileDownloaderImpl.kt:92) 
        at com.tonyodev.fetch2.downloader.SequentialFileDownloaderImpl.run(SequentialFileDownloaderImpl.kt:90) 
        at com.tonyodev.fetch2.downloader.DownloadManagerImpl$start$$inlined$synchronized$lambda$1.run

(DownloadManagerImpl.kt:97) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1115) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:590) 
        at java.lang.Thread.run(Thread.java:818) 
 

мой файл Graddle: применить плагин: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "rahul.gaur.test1"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName 'Alpha'
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    buildToolsVersion '28.0.2'
    compileOptions {
    }
    productFlavors {
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation 'com.tonyodev.fetch2:fetch2:2.2.0-RC12'
    //implementation 'com.writingminds:FFmpegAndroid:0.3.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 
 

я не могу скачать изображение. помогите мне понять, как это легко использовать.

Заранее спасибо за любую помощь.

Убедитесь, что ваш файл или каталог существует или нет. Поскольку logcat показывает «java.io.FileNotFoundException: /downloads/fetchdata/file.png: open failed: ENOENT (Нет такого файла или каталога)»

Mohammod Hossain 17.09.2018 10:51

также проверьте, предоставлены ли разрешения

Farabi Abdelwahed 17.09.2018 10:52

Разрешение @MohammodHossain и Farabi предоставлено, и я загружаю файл со ссылки / сервера, тогда как он может быть на устройстве? я серьезно не понял этого. для чего используется файловая строка? место загрузки или расположение сервера?

wiils 17.09.2018 10:53

@wiils, сначала вам нужно проверить, существует ли папка. Если не создать такой каталог

Mohammod Hossain 17.09.2018 10:58

@MohammodHossain папка "Загрузки" существует в системе по умолчанию, и я ее проверил, и даже я использовал только строку файла как "/ Downloads /", но затем он говорит, что открыть файл не удалось, система только для чтения? черт возьми, я действительно запутался с этим.

wiils 17.09.2018 11:01

@MohammodHossain, я обновил строку файла в основном вопросе. Пожалуйста, посмотрите, как это исправить. Я действительно сбит с толку, чтобы с этим работать.

wiils 17.09.2018 11:07

Ok. Создайте папку с именем «загрузки» и поместите изображение с именем image.png, затем попробуйте

Mohammod Hossain 17.09.2018 11:13

@MohammodHossain fetch не загружает файл с сервера, тогда как я могу сначала поместить изображение в это место (возможно, глупо с моей стороны), и когда он пытается открыть файл с устройства, вместо того, чтобы загружать и сохранять его в этом месте? и теперь я использую папку Download, которая всегда существует в системе.

wiils 17.09.2018 11:18

Я обновил свой ответ

Mohammod Hossain 17.09.2018 11:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
9
1 433
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Строковый файл = "/Download/image.png";

Используйте вместо кода выше

Строковый файл = "/downloads/image.png";

или использовать в качестве образца

Строка url = "http: www.example.com/test.txt";

Строковый файл = "/downloads/test.txt";

в build.gradle

попытайся

реализация "com.tonyodev.fetch2okhttp: fetch2okhttp: 2.2.0-RC12"

вместо того

реализация 'com.tonyodev.fetch2: fetch2: 2.2.0-RC12'

Не могли бы вы поделиться своим файлом build.gradle.

Mohammod Hossain 17.09.2018 11:22

Обновил в основном вопросе

wiils 17.09.2018 11:26

Черт возьми, теперь код не может найти ни одного из классов. и, кстати, okhttp - это загрузчик для выборки, но где сейчас в приложении выборка?

wiils 17.09.2018 11:45
Ответ принят как подходящий

Итак, наконец я нашел ответ, это довольно фитиль. но вот что это такое:

теперь строка файла, которую я использовал: /Download/image.png

что вызывало ошибку

теперь я использую строку как: EEnvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/fetch/image.png";

он работает как надо.

Извините за глупую проблему и спасибо за попытку помочь мне @Mohammod

Не за что. отдай свой голос, если это решит твою проблему

Mohammod Hossain 17.09.2018 11:57

Другие вопросы по теме