Java 使用AsyncTask Android进行ListView plus XML解析

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

希望你一切顺利:)

我想使用AsyncTask解析XML。事实上,在应用程序开始时,我在网上解析XML文件,但我想使用API 11和更高版本上的一些可用功能,但我必须将解析放到一个异步任务中,我真的不知道如何才能做到这一点

下面是在start(类“Main”)上执行的onCreate()方法:

@覆盖
创建时的公共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;
            }
        });
    }