[英]ListView plus XML Parsing using AsyncTask Android
希望一切都對你好:)
我想使用AsyncTask來解析XML。 確實,在應用程序的開始,我在網上解析XML文件,但我想在API 11及更高版本上使用一些可用的功能,但我必須將解析放入AsyncTask中,我真的不知道我怎么能做這個!
這是我在開始時執行的onCreate()方法(類“Main”):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
feeds = DataFeed.getFeeds();
lfa = new ListFeedAdapter(this, feeds);
feedView = ((ListView)findViewById(R.id.listFeed));
feedView.setAdapter(lfa);
feedView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
Feed feed = (Feed) feedView.getItemAtPosition(position);
Log.d("Date", ""+getDatePreferedFormat(feed.getPubDate()));
}
});
feedView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View view, int position, long id) {
shareIt(position);
return true;
}
});
}
這是我在“DataFeed.class”類中的getFeeds()方法:
public static ArrayList<Feed> getFeeds(){
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parsor = null;
ArrayList<Feed> feeds = null;
try {
parsor = factory.newSAXParser();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
URL url = null;
try {
url = new URL("http://localhost/feed");
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
DefaultHandler handler = new ParserXMLHandler();
try {
// Parsing and get all data
parsor.parse(url.openConnection().getInputStream(), handler);
feeds = ((ParserXMLHandler) handler).getData();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// Return arrayList with feeds
return feeds;
}
非常感謝你的幫助!
參考此代碼 -
private class BgTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
//TODO - Call getFeeds Method to populate feeds list & return true/false depending on result of operation
try {
feeds = getFeeds();
} catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if(result){
lfa = new ListFeedAdapter(YourActivity.this, feeds);
feedView.setAdapter(lfa);
}
}
}
在onCreate
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
feedView = ((ListView)findViewById(R.id.listFeed));
new BgTask().execute();
feedView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
Feed feed = (Feed) feedView.getItemAtPosition(position);
Log.d("Date", ""+getDatePreferedFormat(feed.getPubDate()));
}
});
feedView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View view, int position, long id) {
shareIt(position);
return true;
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.