Java 使用AsyncTask Android进行ListView plus XML解析
希望你一切顺利:) 我想使用AsyncTask解析XML。事实上,在应用程序开始时,我在网上解析XML文件,但我想使用API 11和更高版本上的一些可用功能,但我必须将解析放到一个异步任务中,我真的不知道如何才能做到这一点 下面是在start(类“Main”)上执行的onCreate()方法:Java 使用AsyncTask Android进行ListView plus XML解析,java,android,xml,android-asynctask,Java,Android,Xml,Android Asynctask,希望你一切顺利:) 我想使用AsyncTask解析XML。事实上,在应用程序开始时,我在网上解析XML文件,但我想使用API 11和更高版本上的一些可用功能,但我必须将解析放到一个异步任务中,我真的不知道如何才能做到这一点 下面是在start(类“Main”)上执行的onCreate()方法: @覆盖 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
feeds=DataFeed.getFeeds();
lfa=新的ListFeedAdapter(此为馈送);
feedView=((ListView)findViewById(R.id.listFeed));
feedView.setAdapter(lfa);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView适配器、视图视图、int位置、长id){
提要提要=(提要)提要视图.getItemAtPosition(位置);
Log.d(“日期”,“getDatePreferedFormat(feed.getPubDate()));
}
});
setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView适配器、视图视图、int位置、长id){
共享IT(职位);
返回true;
}
});
}
下面是类“DataFeed.class”中的getFeeds()方法:
publicstaticarraylistgetfeeds(){
SAXParserFactory=SAXParserFactory.newInstance();
saxor=null;
arraylistfeeds=null;
试一试{
parsor=factory.newSAXParser();
}捕获(ParserConfiguration异常e){
e、 printStackTrace();
}捕获(SAXE异常){
e、 printStackTrace();
}
URL=null;
试一试{
url=新url(“http://localhost/feed");
}捕获(格式错误的异常e1){
e1.printStackTrace();
}
DefaultHandler=新的ParserXMLHandler();
试一试{
//解析并获取所有数据
parsor.parse(url.openConnection().getInputStream(),handler);
feed=((ParserXMLHandler)handler.getData();
}捕获(SAXE异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
//返回带有提要的arrayList
回馈;
}
非常感谢你的帮助 参考此代码-
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);
}
}
}
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);
}
}
}
@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;
}
});
}