我試圖從URL頁面解析XML
。爲此,我使用了this IBM example中解釋的SAX實施,Adapter
和我從this article得到的其他更改。我也試着實現AsyncTask
來解析並顯示一個ProgressDialog
,但我認爲這是我的應用程序開始崩潰的地方。在Android上使用Sax解析Xml
我真的不知道如何在代碼中實現AsyncTask
,我相信我糟糕的實現會導致我的應用程序強制關閉。
MainActivity:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
ListView lv1;
ProgressDialog ShowProgress;
public static ArrayList<MangaItem> MangaItemList = new ArrayList<MangaItem>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv1 = (ListView) findViewById(R.id.listView1);
ShowProgress = ProgressDialog.show(MainActivity.this, "",
"Loading. Please wait...", true);
//new loadingTask().execute("http://www.mangapanda.com/alphabetical");
new loadFeedTask().execute();
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri
.parse(MangaItemList.get(position).getMangaLink()));
startActivity(intent);
}
});
}
class loadFeedTask extends AsyncTask<String, Void, ArrayList<MangaItem>> {
private String feedUrl;
protected void onPostExecute(String s) {
lv1.setAdapter(new EfficientAdapter(MainActivity.this, MangaItemList));
//new MangaParserTask().execute();
ShowProgress.dismiss();
}
protected ArrayList<MangaItem> doInBackground(String... params) {
ArrayList<MangaItem> ParsedMangaItemList = new ArrayList<MangaItem>();
feedUrl = "http://www.mangapanda.com/alphabetical";
FeedParser parser = new SaxFeedParser(feedUrl);
ParsedMangaItemList = parser.parse();
for (MangaItem mitem : ParsedMangaItemList) {
MangaItemList.add(mitem);
}
return MangaItemList;
}
}
}
我如何正確使用AsyncTask
使我的解析器將返回一個ArrayList
,我可以再放入ArrayAdapter
你的方法是正確的。怎麼了? – adatapost
@AVD當我運行它時,我的應用程序將強制關閉。 Logcat不會給出任何錯誤,但在DalvikVM下面有兩個'AsyncTask''線程'和一個在其旁邊的「暫停運行時異常」。這就像我調試這個 – Davidrd91
一樣多,我找到了一些*無關的代碼。看看答案。 – adatapost