我的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{ @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#中,我会使用逐字字符串),还是......?
我删除了有问题的行,但它仍然失败,抛出IOException.
我实际上切换到了完全不同的代码,这里可以看到[为什么我得到,"不兼容的类型:对象无法转换为字符串"这个?(它正在抛出NetworkOnMainThreadException),但是当失败时我决定再给这个代码一个机会,但是输入了"catch(IOException e)"块.
有人知道为什么吗?
你忘了把任何参数传递给你的AsyncTask:
new NetworkTask().execute();
这就是你的数组在这里为空的原因:
String link = params[0];
==>在执行AsyncTask时传递一个参数:
new NetworkTask().execute(someLink); //execute AsyncTask with one param
更新:实际上似乎你String link
在doInBackground方法中没有做任何事情.那么也许你可以摆脱那条线?