【问题标题】:AsyncTask stops app before first line of doInBackground is executed with ArrayIndexOutOfBoundsExceptionAsyncTask 在使用 ArrayIndexOutOfBoundsException 执行 doInBackground 的第一行之前停止应用程序
【发布时间】:2017-10-24 03:48:52
【问题描述】:

在onCreate中,我创建并执行pt:

PostTask pt =  new PostTask(this);
pt.execute()

(PostTask 扩展 AsyncTask)

但是,应用程序在到达 PostTask::doInBackground 的第一行时立即停止:

protected String doInBackground(String... params) {
String url=params[0];

我错过了什么吗?

以下是日志错误:

                                                                 --------- 
beginning of crash
10-21 02:38:31.694 5506-5591/org.researchstack.sampleapp E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                       Process: org.researchstack.sampleapp, PID: 5506
                                                                       java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                           at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                           at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                           at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                           at java.lang.Thread.run(Thread.java:818)
                                                                        Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
                                                                           at org.researchstack.sampleapp.PostTask.doInBackground(SampleApplication.java:103)
                                                                           at org.researchstack.sampleapp.PostTask.doInBackground(SampleApplication.java:85)
                                                                           at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                           at java.lang.Thread.run(Thread.java:818) 

【问题讨论】:

  • 发布您的日志错误,也许我们可以为您指明正确的方向
  • 刚刚用日志错误更新了上面的问题。
  • 引起:java.lang.ArrayIndexOutOfBoundsException:length=0; index=0 发布您的 doInBackground 方法。

标签: android android-asynctask


【解决方案1】:

由于您的 AsyncTask 期望 url 进入 params varargs,因此您需要在执行 AsyncTask 时提供 url:

String url = "http://www.example.com"
PostTask pt =  new PostTask(this);
pt.execute(url);

然后,url 将是params 中的第一个元素,因此您在 AsyncTask 中已有的代码将起作用:

protected String doInBackground(String... params) {
    String url=params[0];
    //.........

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多