While parsing data from RSS feeds insert Multiple rows into SQLite
<p>I can parse data successfully from an RSS feed and list all the titles/dates... etc. in a listview.</p>

<p>However, I want to insert all the retrieved data (from the RSS feed) to a database where I can display them when needed.  </p>

<p>I have been stuck with the this problem for a couple of hours now and the error I keep getting is <strong>AsyncTask #1</strong> </p>

<p>The following is my code;</p>

<pre><code>    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_rss_channel);

        listview = (ListView)findViewById(R.id.rssChannelListView);
        //text = (TextView)findViewById(R.id.TextView01);

        mySQLiteAdapter = new DataAdapter(this);
        mySQLiteAdapter.createDatabase();
        mySQLiteAdapter.open();


        // Get the RSS URL that was set in the RssTabActivity
        String rssUrl = (String)getIntent().getExtras().get("rss-url");

        GetRSSDataTask task = new GetRSSDataTask();

        // Start process RSS task
        task.execute(rssUrl);

    }

    /**
     * This class downloads and parses RSS Channel feed.
     */
    private class GetRSSDataTask extends AsyncTask&lt;String, Void, List&lt;RssItem&gt; &gt; {
        @Override
        protected List&lt;RssItem&gt; doInBackground(String... urls) {
            try {   
                // Create RSS reader
                RssReader rssReader = new RssReader(urls[0]);
                saveContact();
                // Parse RSS, get items
                return rssReader.getItems();

            } catch (Exception e) {
                Log.e("RssChannelActivity", e.getMessage());
            }

            return null;
        }

         protected void onPreExecute(){
             super.onPreExecute();
             dialog = ProgressDialog.show(RssChannelActivity.this,"", "loading...");
         }
        @Override
        protected void onPostExecute(List&lt;RssItem&gt; result) {

            // Get a ListView from the RSS Channel view
            ListView itcItems = (ListView) findViewById(R.id.rssChannelListView);
            // Create a list adapter
            ArrayAdapter&lt;RssItem&gt; adapter = new ArrayAdapter&lt;RssItem&gt;(RssChannelActivity.this,
                    android.R.layout.simple_list_item_1, result);
            // Set list adapter for the ListView
            itcItems.setAdapter(adapter);
            // Dismiss dialog
            dialog.dismiss();

            // Set list view item click listener
            itcItems.setOnItemClickListener(new ListListener(result, local));
        }
    }


     private void saveContact() 
     {
         DataAdapter dbConnector = new DataAdapter(this);
         dbConnector.insertTitleDate(dbcurrentItem.getIDDB(),
                 dbcurrentItem.getTitleDB().toString(),
                 dbcurrentItem.getPubDateDB().toString());
     }
}
</code></pre>

<p><strong>EDIT:</strong></p>

<p>my Handler Class:</p>

<pre><code>public class RssParseHandler extends DefaultHandler {

    DataAdapter dbConnector;    

    // Used to reference items in db
    private DBItem dbcurrentItem;

    private List&lt;RssItem&gt; rssItems;

    // Used to reference item while parsing
    private RssItem currentItem;

    // Parsing title indicator
    private boolean parsingTitle;

    // Parsing pubdate indicator
    private boolean parsingDescription; 

    // Parsing pubdate indicator
    private boolean parsingPubDate; 

    // Parsing link indicator
    private boolean parsingLink;

    // A buffer used to build current title being parsed
    private StringBuffer currentSb;


    public RssParseHandler() {
        rssItems = new ArrayList&lt;RssItem&gt;();
    }

    public List&lt;RssItem&gt; getItems() {
        return rssItems;
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if ("item".equals(qName)) {
            currentItem = new RssItem();
            currentSb = new StringBuffer();
        } 
        else if ("title".equals(qName)) {
            parsingTitle = true;            
        } 
        else if ("description".equals(qName)) {
            parsingDescription = true;          
        }
        else if ("pubDate".equals(qName)) {
            parsingPubDate = true;          
        }
        else if ("link".equals(qName)) {
            parsingLink = true;
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if ("item".equals(qName)) {
            rssItems.add(currentItem);
            currentItem = null;
        } 
        else if ("title".equals(qName)) {           
            parsingTitle = false;           
            // Set item's title when we parse item-&gt;title tag not the channel title tag
            if (currentItem != null) {
                // Set item's title here
                /* if this is deleted it will NOT print on the listview */
                currentItem.setTitle(currentSb.toString());
            }           
        }
        else if ("description".equals(qName)) {         
            parsingDescription = false;         
            // Set item's title when we parse item-&gt;title tag not the channel title tag
            if (currentItem != null) {
                // Set item's title here
                /* if this is deleted it will NOT print on the listview */
                currentItem.setDate(currentSb.toString());
            }
        }
        else if ("pubDate".equals(qName)) {         
            parsingPubDate = false;         
            // Set item's title when we parse item-&gt;title tag not the channel title tag
            if (currentItem != null) {
                // Set item's title here
                /* if this is deleted it will NOT print on the listview */
                currentItem.setDate(currentSb.toString());
            }
        }
        else if ("link".equals(qName)) {
            parsingLink = false;
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {

        dbcurrentItem = new DBItem();

        String strCharacters = new String(ch,start,length);

        if (parsingTitle) {
            if (currentItem != null) {
                // Here we append the title to the buffer due to network issues.
                // Sometimes this characters method is called multiple times for a tag contents.
                currentSb.append(new String(ch, start, length));
                Log.v("Reading Title: ", strCharacters.toString());
                dbcurrentItem.setTitleDB(strCharacters.toString());
                dbConnector.insertTitle(strCharacters.toString());
            }
        }
        else if (parsingDescription) {
            if (currentItem != null) {
                // Here we append the title to the buffer due to network issues.
                // Sometimes this characters method is called multiple times for a tag contents.
                //parse description for any image or video links

                /* Here you need to remove unwanted tages */
                currentSb.append(new String(ch, start, length));
                Log.d("Reading Description: ", strCharacters.toString());
            }
        }
        else if (parsingPubDate) {
            if (currentItem != null) {
                // Here we append the title to the buffer due to network issues.
                // Sometimes this characters method is called multiple times for a tag contents.
                currentSb.append(new String(ch, start, length));
                Log.i("Reading PubDate: ", strCharacters.toString());
                ///
                dbConnector.insertDate(strCharacters.toString());
            }
        }
        else if (parsingLink) {
            if (currentItem != null) {
                currentItem.setLink(new String(ch, start, length));
                Log.i("Reading PostURL: ", strCharacters.toString());
                parsingLink = false;
            }

            //dbConnector.insertTitleDate(dbcurrentItem.getIDDB(),
                 //dbcurrentItem.getTitleDB().toString(),
                 //dbcurrentItem.getPubDateDB().toString());
        }
    }   
}
</code></pre>

<p><strong>LogCat</strong></p>

<pre><code>05-31 10:25:42.366: E/AndroidRuntime(5463): FATAL EXCEPTION: AsyncTask #1
05-31 10:25:42.366: E/AndroidRuntime(5463): java.lang.RuntimeException: An error occured while executing doInBackground()
05-31 10:25:42.366: E/AndroidRuntime(5463):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at java.lang.Thread.run(Thread.java:856)
05-31 10:25:42.366: E/AndroidRuntime(5463): Caused by: java.lang.NullPointerException: println needs a message
05-31 10:25:42.366: E/AndroidRuntime(5463):     at android.util.Log.println_native(Native Method)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at android.util.Log.e(Log.java:231)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at com.itcuties.multicategoryrssreader.RssChannelActivity$GetRSSDataTask.doInBackground(RssChannelActivity.java:90)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at com.itcuties.multicategoryrssreader.RssChannelActivity$GetRSSDataTask.doInBackground(RssChannelActivity.java:1)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-31 10:25:42.366: E/AndroidRuntime(5463):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-31 10:25:42.366: E/AndroidRuntime(5463):     ... 4 more
</code></pre>
