簡體   English   中英

使用AsyncTask Android的ListView加XML解析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM