2
我写了一些应用程序,使用lauotprocce栏和AsyncTask使用xml进行一些工作并将其显示给用户。 我想dismess回proccess后proccess酒吧将完成 但有一些问题,我的代码使用AsyncTask和进程栏
错误:
FATAL EXCEPTION: AsyncTask #2
03-17 11:25:29.559: E/AndroidRuntime(31114): java.lang.RuntimeException: An error while executing doInBackground()
03-17 11:25:29.559: E/AndroidRuntime(31114): at android.os.AsyncTask$3.done(AsyncTask.java:200)
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.lang.Thread.run(Thread.java:1019)
03-17 11:25:29.559: E/AndroidRuntime(31114): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
0 3-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.ArrayList.get(ArrayList.java:311)
03-17 11:25:29.559: E/AndroidRuntime(31114): at com.example.News.NewsActivity$GetDataTask.doInBackground(NewsActivity.java:67)
03-17 11:25:29.559: E/AndroidRuntime(31114): at
我的代码是:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.progdailog);
mContext = this;
new GetDataTask().execute();
}
protected void onPostExecute(Integer result) {
listAdapter = new CustomListAdapter(mContext, R.layout.list_item,
ListNews);
ListView lv = ((ListActivity) mContext).getListView();
lv.setAdapter(listAdapter); // on test
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position != 0) {
// When clicked, show a toast with the TextView text
String s = ReadXML.hadashotListItems.get(position - 1).link;
Intent intent = new Intent(NewsActivity.this,
WebActivity.class);
intent.putExtra("url", s);
startActivity(intent);
}
}
public void onScrollStateChanged(final AbsListView view,
final int scrollState) {
if (scrollState == 0)
listAdapter.notifyDataSetChanged();
}
});
//progDailog.dismiss();
super.onPostExecute(result);
}
}
行67代码:
protected Integer doInBackground(Void... params) {
try {
ReadXML = new ReadXMLFile(mContext, getIntent().getExtras()
.getString("urlXml"));
ListNews.add("NEWS");
if (checkDate(ReadXML.hadashotListItems.get(0).pubDate,ReadXML.hadashotListItems.get(1).pubDate))
for (int i = 0; i < ReadXML.hadashotListItems.size(); i++) {
ListNews.add(ReadXML.hadashotListItems.get(i).title + "\n"
+ ReadXML.hadashotListItems.get(i).pubDate);
}
else
for (int i = ReadXML.hadashotListItems.size()-1; i >=0; i--) {
ListNews.add(ReadXML.hadashotListItems.get(i).title + "\n"
+ ReadXML.hadashotListItems.get(i).pubDate);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 1;
}
我认为事端g错误的观点。跳你可以帮助改变它将工作的代码。
请指向以下代码行:at com.example.News.NewsActivity $ GetDataTask.doInBackground(NewsActivity.java:67) – Egor 2012-03-17 09:50:31
GetDataTask()是您错过的类来复制它。看看这个http://stackoverflow.com/a/9407916/1012284 – 2012-03-17 09:54:13
你的'ReadXMLFile'返回一个空列表。在你做任何事情之前,你应该做if(ReadXML.hadashotListItems == null || ReadXML.hadashotListItems.size()== 0)return;'(如果该列表不能为空,则可以跳过空检查 – zapl 2012-03-17 10:03:32