android - AsyncTask 致命异常 #1

标签 android android-asynctask

我有一个异步任务,它使用 channel 将文本文件下载到本地文件。

class getUrlsClass extends AsyncTask<String, Integer, File>{

    @Override
    protected File doInBackground(String... params) {
        URLConnection uc;
        File urlFiles= new File(getApplicationContext().getFilesDir(), "urls");
        try {
            URL url = new URL(params[0]);
            uc = url.openConnection();
            uc.setUseCaches(false);
            ReadableByteChannel rbc = Channels.newChannel(uc.getInputStream());
            FileOutputStream fos = new FileOutputStream(urlFiles);
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
            fos.close();


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

}

我得到了一个致命的运行时异常,这使得程序在启动时崩溃:

 07-22 01:31:01.769: E/AndroidRuntime(27610): FATAL EXCEPTION: AsyncTask #1
07-22 01:31:01.769: E/AndroidRuntime(27610): Process: com.example.griding, PID: 27610
07-22 01:31:01.769: E/AndroidRuntime(27610): java.lang.RuntimeException: An error occured while executing doInBackground()
07-22 01:31:01.769: E/AndroidRuntime(27610):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at java.lang.Thread.run(Thread.java:841)
07-22 01:31:01.769: E/AndroidRuntime(27610): Caused by: java.lang.IllegalArgumentException: position=0 count=9223372036854775807
07-22 01:31:01.769: E/AndroidRuntime(27610):    at java.nio.FileChannelImpl.transferFrom(FileChannelImpl.java:368)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at com.example.myApp.DownloadManagerActivity$getUrlsClass.doInBackground(DownloadManagerActivity.java:284)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at com.example.myApp.DownloadManagerActivity$getUrlsClass.doInBackground(DownloadManagerActivity.java:1)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-22 01:31:01.769: E/AndroidRuntime(27610):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-22 01:31:01.769: E/AndroidRuntime(27610):    ... 4 more

任务有什么问题?

最佳答案

异常发生于:

fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

因为参数count不能大于Integer.MAX_VALUE。这导致了这个特殊的异常!

FileChannelImpl 类文件中找到此内容:

    if (position < 0 || count < 0 || count > Integer.MAX_VALUE) {
        throw new IllegalArgumentException("position=" + position + " count=" + count);
    }

希望对您有帮助! :)

关于android - AsyncTask 致命异常 #1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31554863/

相关文章:

c# - AsyncTask 错误无法发送 POST 数据

android - 在应用程序退出时取消 AsyncTask SOVLED

android - 在 Internet 不可用时在 ListView 中重复使用图像和文本

android - 位图压缩和异步任务保存期间的问题

android - Android 中的互联网连接检查

java - 如何从 Firebase 获取值(value)

java - Android 相机捕获的 URI 解释

android - 使用 Parse 服务器进行数字验证

java - 基于矩阵位置[行][列]的Gridview项集

android - 致命异常 : AsyncTask #1 Android