Я пытаюсь использовать Получить библиотеку для своего приложения для 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'
я не могу скачать изображение. помогите мне понять, как это легко использовать.
Заранее спасибо за любую помощь.
также проверьте, предоставлены ли разрешения
Разрешение @MohammodHossain и Farabi предоставлено, и я загружаю файл со ссылки / сервера, тогда как он может быть на устройстве? я серьезно не понял этого. для чего используется файловая строка? место загрузки или расположение сервера?
@wiils, сначала вам нужно проверить, существует ли папка. Если не создать такой каталог
@MohammodHossain папка "Загрузки" существует в системе по умолчанию, и я ее проверил, и даже я использовал только строку файла как "/ Downloads /", но затем он говорит, что открыть файл не удалось, система только для чтения? черт возьми, я действительно запутался с этим.
@MohammodHossain, я обновил строку файла в основном вопросе. Пожалуйста, посмотрите, как это исправить. Я действительно сбит с толку, чтобы с этим работать.
Ok. Создайте папку с именем «загрузки» и поместите изображение с именем image.png, затем попробуйте
@MohammodHossain fetch не загружает файл с сервера, тогда как я могу сначала поместить изображение в это место (возможно, глупо с моей стороны), и когда он пытается открыть файл с устройства, вместо того, чтобы загружать и сохранять его в этом месте? и теперь я использую папку Download, которая всегда существует в системе.
Я обновил свой ответ




Строковый файл = "/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.
Обновил в основном вопросе
Черт возьми, теперь код не может найти ни одного из классов. и, кстати, okhttp - это загрузчик для выборки, но где сейчас в приложении выборка?
Итак, наконец я нашел ответ, это довольно фитиль. но вот что это такое:
теперь строка файла, которую я использовал: /Download/image.png
что вызывало ошибку
теперь я использую строку как: EEnvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/fetch/image.png";
он работает как надо.
Извините за глупую проблему и спасибо за попытку помочь мне @Mohammod
Не за что. отдай свой голос, если это решит твою проблему
Убедитесь, что ваш файл или каталог существует или нет. Поскольку logcat показывает «java.io.FileNotFoundException: /downloads/fetchdata/file.png: open failed: ENOENT (Нет такого файла или каталога)»