前提・実現したいこと
環境
- Windows
- Kotlin
- Android Studio
実現したいこと
Android アプリで 700 MB のファイルをインターネットからアプリのインストールされている端末にダウンロードしたい
試したこと
以下の記事を参考にコードを書いていたところ、
val (_, _, result) = url.httpGet().awaitByteArrayResponseResult()
で
java.lang.OutOfMemoryError: Failed to allocate a 892384224 byte allocation with 1556480 free bytes and 510MB until OOM, target footprint 3018616, growth limit 536870912
と表示され、実行できませんでした。
次に https://github.com/kittinunf/Fuel のテストコードを参考に
以下のコードを書いたところ
val (request, response, result) = Fuel.download(url) .fileDestination { _, _ -> File(path + "/" + File) } .progress { _, _ -> progressCalls += 1 } .responseString() val (data, error) = result
android.os.NetworkOnMainThreadException
というエラーで実行できません。
上のエラー解消には Coroutine を使うということが分かったので、以下のコードを追加したのですが、
val downloader: myDownloader = MyDownloader() val path: String? = Environment.getExternalStorageDirectory().getAbsolutePath(); val scope = CoroutineScope(Dispatchers.Default) scope.launch { downloader.download(path, "700MBファイルのURL") }
やはり以下で
val (request, response, result) = Fuel.download(url) .fileDestination { _, _ -> File(path + "/" + File) } .progress { _, _ -> progressCalls += 1 } .responseString() val (data, error) = result
java.lang.OutOfMemoryError: Failed to allocate a 892384224 byte allocation with 1556480 free bytes and 510MB until OOM, target footprint 3018616, growth limit 536870912
と表示され、実行できませんでした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/12 06:26 編集