0

I have a problem and I failed to solve it by myself!.

I would to get RSS feeds on my application , so I pot this Url in my code in order to get the xml file then making parsing ... Rss Feeds .

I succeeded to get the xml data from the Url which is the returned string from the do in background method BUT the problem is when I made parsing, non of the cases in the xmlParser method implemented!. The following are all my code and StackTrace:

MainActivity class :

package com.example.testfeeds;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

@SuppressWarnings("unused")
public class MainActivity extends Activity {

    String name;
    Button getfeeds;
    ArrayList<NewsFeeds> feeds;
    ListView feedsList;
    ArrayAdapter<NewsFeeds> adapter;
    ProgressDialog progress ;



    @SuppressWarnings("null")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getfeeds = (Button) findViewById(R.id.button1);
        feedsList=(ListView) findViewById(R.id.listView1);


        progress = new ProgressDialog(this); 
        progress.setMessage("Loading .... "); 
        progress.setCancelable(false); 


        getfeeds.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

            new GetFeeds().execute("http://yunn.yu.edu.jo/index.php?option=com_content&view=category&id=55&layout=blog&Itemid=104&format=feed&type=rss"); 

            }
        });

        feedsList.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int position,
                    long id) {

                NewsFeeds item = (NewsFeeds) adapter.getItemAtPosition(position);

                String url= item.getLink();

                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

                startActivity(browserIntent);

            }
        });



    }

////////////////////////////////////////////////////////////////////////////

     class GetFeeds extends AsyncTask<String, Integer, String>{


         @Override
            protected void onPreExecute() {

                progress.show();
                super.onPreExecute();
            }

        @Override
        protected String doInBackground(String... arg0) {

            String xmlData = GetUrlBody(arg0[0]); 

            Log.d("msg","in doInBackground .. ");


            return xmlData ;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {

            super.onProgressUpdate(values);
        }


        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            Log.d("msg","the result not null");

            ////--------------------------------------////

            //Log.d("msg",result);

            FileOutputStream makeXml = null ; //declare a file to store the incoming xml data.
            InputStream xmlFile = null; // declare an input stream to get the xml file.
            try {


                makeXml= openFileOutput("temp.xml", Context.MODE_PRIVATE);
                makeXml.write(result.getBytes());
                makeXml.flush();
                makeXml.close(); 

                xmlFile= openFileInput("temp.xml"); 

//              StringBuilder sb = new StringBuilder(); 
//              int a =0 ; 
//              while ((a=xmlFile.read())!=-1) {
//                   sb.append((char)a);
//                  
//              }
//              
//              
//              
//              Log.d("msg",sb.toString());


            } catch (IOException e) {


                e.printStackTrace();
            }

          ////--------------------------------------////


            XmlPullParserFactory pullParserFactory;

            try {
                pullParserFactory = XmlPullParserFactory.newInstance();
                XmlPullParser parser = pullParserFactory.newPullParser();
                    parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
                    parser.setInput(xmlFile, null);
                    parseXML(parser);
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            } catch (IOException e) {

                e.printStackTrace();
            }


            progress.dismiss();

        }




     }


////////////////////////////////////////////////////////////////////////////

        String GetUrlBody (String Url ){

            Log.d("msg","in get url ..");

        HttpClient cli = new DefaultHttpClient(); 



        HttpGet g = new HttpGet(Url); 



        try{
        HttpResponse res = cli.execute(g);



        if(res.getStatusLine().getStatusCode() == 200){

            String s =
        EntityUtils.toString(res.getEntity(), HTTP.UTF_8); 

            return s; 

        }else {
            return "Not Found"; 
        }

        }catch(Exception exx){}


        return null; 
    }


////////////////////////////////////////////////////////////////////////////

        private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException
        {

            int eventType = parser.getEventType();
            NewsFeeds currentFeed = null; 
            // int i=0;

            while (eventType != XmlPullParser.END_DOCUMENT){

                String tagName = null;

                switch (eventType){

                //----------------------------------//
                case XmlPullParser.START_DOCUMENT: 
                    feeds = new ArrayList<NewsFeeds>();
                    adapter = new ArrayAdapter<NewsFeeds>(this,R.layout.list_view,R.id.listView1, feeds);
                    break;
               //----------------------------------//
                 case XmlPullParser.START_TAG:
                     tagName = parser.getName();
                     if (tagName == "item"){
                         currentFeed = new NewsFeeds();
                     } else if (currentFeed != null){
                         if (tagName == "title"){
                             currentFeed.title = parser.nextText();
                             Log.d("value",currentFeed.title);
                         } else if (tagName == "link"){
                            currentFeed.link = parser.nextText();
                            Log.d("value",currentFeed.link);
                         } else if (tagName == "pubDate"){
                             currentFeed.feedDate= parser.nextText();
                             Log.d("value",currentFeed.feedDate);
                         }
                     }
                     break;                     
               //----------------------------------//
                 case XmlPullParser.END_TAG:
                     tagName = parser.getName();
                     if (tagName.equalsIgnoreCase("item") && currentFeed != null){
                        feeds.add(currentFeed);
                     }

              //----------------------------------//

                  default : Log.d("error","non of the cases implemented!");

                     break;

                }// end-switch.

                ///Log.d("success",feeds.get(0).getTitle());
                eventType= parser.next();
                //i++;
            }// end-while.



        } //end xmlParser method.


////////////////////////////////////////////////////////////////////////////


} // end- MainActivity class.

NewsFeeds class :

package com.example.testfeeds;

public class NewsFeeds {

    String title;
    String link;
    String feedDate;

    public void setTitle(String title) {
        this.title = title;
    }


    public void setLink(String link) {
        this.link = link;
    }


    public void setFeedDate(String feedDate) {
        this.feedDate = feedDate;
    }


    public String getFeedDate() {
        return feedDate;
    }


    public String getTitle() {
        return title;
    }


    public String getLink() {
        return link;
    }


}

StackTrace:

07-27 13:10:29.685: D/dalvikvm(9308): GC_EXTERNAL_ALLOC freed 783 objects / 56336 bytes in 424ms
07-27 13:13:40.009: D/msg(9308): in get url ..
07-27 13:14:05.304: D/dalvikvm(9308): GC_FOR_MALLOC freed 1803 objects / 94784 bytes in 351ms
07-27 13:14:05.475: D/msg(9308): in doInBackground .. 
07-27 13:14:05.564: D/msg(9308): the result not null
07-27 13:14:06.164: D/dalvikvm(9308): GC_FOR_MALLOC freed 460 objects / 920152 bytes in 241ms
07-27 13:14:06.864: D/error(9308): non of the cases implemented!
07-27 13:14:06.864: D/error(9308): non of the cases implemented!
07-27 13:14:06.864: D/error(9308): non of the cases implemented!
07-27 13:14:06.887: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.915: D/error(9308): non of the cases implemented!
07-27 13:14:06.915: D/error(9308): non of the cases implemented!
07-27 13:14:06.935: D/error(9308): non of the cases implemented!
07-27 13:14:06.935: D/error(9308): non of the cases implemented!
07-27 13:14:06.944: D/error(9308): non of the cases implemented!
07-27 13:14:06.944: D/error(9308): non of the cases implemented!
07-27 13:14:06.984: D/error(9308): non of the cases implemented!
07-27 13:14:06.984: D/error(9308): non of the cases implemented!
07-27 13:14:06.994: D/error(9308): non of the cases implemented!
07-27 13:14:06.994: D/error(9308): non of the cases implemented!
07-27 13:14:07.007: D/error(9308): non of the cases implemented!
07-27 13:14:07.030: D/error(9308): non of the cases implemented!
07-27 13:14:07.034: D/error(9308): non of the cases implemented!
07-27 13:14:07.034: D/error(9308): non of the cases implemented!
07-27 13:14:07.055: D/error(9308): non of the cases implemented!
07-27 13:14:07.055: D/error(9308): non of the cases implemented!
07-27 13:14:07.055: D/error(9308): non of the cases implemented!
07-27 13:14:07.084: D/error(9308): non of the cases implemented!
07-27 13:14:07.084: D/error(9308): non of the cases implemented!
07-27 13:14:07.084: D/error(9308): non of the cases implemented!
07-27 13:14:07.104: D/error(9308): non of the cases implemented!
07-27 13:14:07.125: D/error(9308): non of the cases implemented!
07-27 13:14:07.125: D/error(9308): non of the cases implemented!
07-27 13:14:07.125: D/error(9308): non of the cases implemented!
07-27 13:14:07.148: D/error(9308): non of the cases implemented!
07-27 13:14:07.148: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.197: D/error(9308): non of the cases implemented!
07-27 13:14:07.197: D/error(9308): non of the cases implemented!
07-27 13:14:07.197: D/error(9308): non of the cases implemented!
07-27 13:14:07.225: D/error(9308): non of the cases implemented!
07-27 13:14:07.225: D/error(9308): non of the cases implemented!
07-27 13:14:07.225: D/error(9308): non of the cases implemented!

And so on .. until the end of document , why there is an error in parsing ?

1 Answer 1

1

I think the switch statement is working fine, but you have other problems with your code. First of all, you missed the break statement in your last non default case:

              case XmlPullParser.END_TAG:
                 tagName = parser.getName();
                 if (tagName.equalsIgnoreCase("item") && currentFeed != null){
                    feeds.add(currentFeed);
                 }
                 //<---- here!

              default : Log.d("error","non of the cases implemented!");
                 break;

That log statement is being run every time you find an end tag, and that's why you get all those log messages.

The real problem is that you're doing string comparisons with == instead of using the .equals(), for example:

                 if (tagName == "item") { //<-- this will never be true  
                     currentFeed = new NewsFeeds();
                 }

Switch those to be "item".equals(tagName).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.