加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么这个后台任务因致命异常而失败?

发布时间:2020-12-15 04:19:05 所属栏目:Java 来源:网络整理
导读:我的MainActivity中的以下代码在重写的doInBackground()方法中失败并出现致命异常: public class MainActivity extends ActionBarActivity { . . . public void onFetchBtnClicked(View v){ if(v.getId() == R.id.FetchBtn){ Toast.makeText(getApplication
我的MainActivity中的以下代码在重写的doInBackground()方法中失败并出现致命异常:

public class MainActivity extends ActionBarActivity {

    . . .

    public void onFetchBtnClicked(View v){
        if(v.getId() == R.id.FetchBtn){
            Toast.makeText(getApplicationContext(),"You mashed the button,dude.",Toast.LENGTH_SHORT).show();
            new NetworkTask().execute();
        }
    }

    public static class NetworkTask extends AsyncTask<String,Void,HttpResponse> {

        @Override
        protected HttpResponse doInBackground(String... params) {
            String link = params[0];
            HttpGet request = new HttpGet("http://localhost:28642/api/deliveries/Count");
            AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
            try {
                return client.execute(request);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            } finally {
                client.close();
            }
        }

        @Override
        protected void onPostExecute(HttpResponse result) {
            FileOutputStream f = null;
            //Do something with result
            if (result != null)
                    /* result.getEntity().writeTo(new FileOutputStream(f)); */
                try {
                    result.getEntity().writeTo(f);
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

    }

具有异常上下文的smidgin的特定异常消息如下:

03-31 18:04:26.350    1401-1401/hhs.app I/Choreographer﹕ Skipped 33 frames!  The application may be doing too much work on its main thread.
03-31 18:05:00.030    1401-1420/hhs.app W/dalvikvm﹕ threadid=12: thread exiting with uncaught exception (group=0xb2a7aba8)
03-31 18:05:00.250    1401-1420/hhs.app E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: hhs.app,PID: 1401
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
            at hhs.app.MainActivity$NetworkTask.doInBackground(MainActivity.java:68)
            at hhs.app.MainActivity$NetworkTask.doInBackground(MainActivity.java:64)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
????????????at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
????????????at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
????????????at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
????????????at java.lang.Thread.run(Thread.java:841)

有什么问题 – 它在doInBackground()的git-go失败了.我的网址是由于打击造成的“坏”(在C#中,我会使用逐字字符串),还是……?

UPDATE

我删除了有问题的行,但它仍然失败,抛出IOException.

我实际上切换到了完全不同的代码,这里可以看到[为什么我得到,“不兼容的类型:对象无法转换为字符串”这个? (它正在抛出NetworkOnMainThreadException),但是当失败时我决定再给这个代码一个机会,但是输入了“catch(IOException e)”块.

有人知道为什么吗?

解决方法

这个例外:

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0

告诉您正在访问索引0处的空数组,在此行中:

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

注意,在任务之后你不要在任何地方使用链接变量(也不是params).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读