gpt4 book ai didi

java - 为什么此后台任务会因致命异常而失败?

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:56 26 4
gpt4 key购买 nike

我的 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();
}
}

}

具体的异常消息,以及一些预异常上下文如下:

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 中失败。我的 URL 是“坏”的原因(在 C# 中,我会使用逐字字符串),还是...?

更新

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

我实际上已经切换到完全不同的代码,如此处所示[为什么我得到“不兼容的类型:对象无法转换为字符串”? (抛出 NetworkOnMainThreadException),但当失败时,我决定再给这段代码一次机会,但输入了“catch (IOException e)” block 。

有人知道为什么吗?

最佳答案

您忘记将任何参数传递给您的 AsyncTask这里:

 new NetworkTask().execute();

这就是为什么你的数组在这里是空的:

 String link = params[0];

==> 在执行 AsyncTask 时传递一个参数:

 new NetworkTask().execute(someLink); //execute AsyncTask with one param

更新:实际上您似乎没有对 doInBackground 方法中的 String link 做任何事情。那么也许您可以摆脱那条线?

关于java - 为什么此后台任务会因致命异常而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22773300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com