java - Error parsing Xml Rss feed in android -
hi there i'm newbie in android development , i'm following tutrial got errors need , i'm trying make project rss feed apple store" top 10 apps" , parsing android studio project , show in listview .. here's error log
> 09-30 18:04:35.196 1969-1969/com.katarina.ahmed.top10appdownloader > i/timeline﹕ timeline: activity_idle id: android.os.binderproxy@6ae73bc > time:91550625 > > 09-30 18:04:36.331 1969-1969/com.katarina.ahmed.top10appdownloader > d/viewrootimpl﹕ viewpostimeinputstage action_down > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ java.lang.nullpointerexception: attempt invoke > virtual method 'int java.lang.string.length()' on null object > reference > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ java.io.stringreader.<init>(stringreader.java:47) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ > com.katarina.ahmed.top10appdownloader.parseapplications.process(parseapplications.java:37) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ > com.katarina.ahmed.top10appdownloader.mainactivity$1.onclick(mainactivity.java:38) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ android.view.view.performclick(view.java:5184) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ android.view.view$performclick.run(view.java:20910) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ android.os.handler.handlecallback(handler.java:739) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ android.os.handler.dispatchmessage(handler.java:95) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ android.os.looper.loop(looper.java:145) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ > android.app.activitythread.main(activitythread.java:5942) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ java.lang.reflect.method.invoke(native method) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ java.lang.reflect.method.invoke(method.java:372) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ > com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1400) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > w/system.err﹕ @ > com.android.internal.os.zygoteinit.main(zygoteinit.java:1195) > > 09-30 18:04:36.426 1969-1969/com.katarina.ahmed.top10appdownloader > d/main activity﹕ error parsing file the code main :
package com.com.katarina.top10appdownloader; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.util.log; import android.view.menu; import android.os.asynctask; import android.view.menuitem; import android.view.view; import android.widget.arrayadapter; import android.widget.button; import android.widget.listview; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.net.httpurlconnection; import java.net.url; import java.util.arraylist; public class mainactivity extends appcompatactivity { button btnparse; listview listapps; string xmldata; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); btnparse=(button) findviewbyid(r.id.btnparse); listapps=(listview) findviewbyid(r.id.listapps); btnparse.setonclicklistener(new view.onclicklistener(){ @override public void onclick(view v) { parseapplications parse = new parseapplications(xmldata); boolean operationstatus=parse.process(); if(operationstatus) { arraylist<application> allapps=parse.getapplications(); arrayadapter<application> adapter=new arrayadapter<application>(mainactivity.this,r.layout.list_item,allapps); listapps.setvisibility(listapps.visible); listapps.setadapter(adapter); } else { log.d("main activity","error parsing file"); } } }); new downloaddata().execute("http://ax.itunes.apple.com/webobjects/mzstoreservices.woa/ws/rss/topfreeapplications/limit=10/xml"); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } private class downloaddata extends asynctask<string,void,string> { string myxmldata; protected string doinbackground(string...urls) { try { myxmldata=downloadxml(urls[0]); } catch (ioexception e) { return " unable download xml file "; } return ""; } protected void onpostexecute(string result) { log.d("onpostexecute", myxmldata); xmldata=myxmldata; } private string downloadxml (string theurl) throws ioexception { int buffer_size=2000; inputstream =null; string xmlcontents =""; try{ url url=new url(theurl); httpurlconnection conn=(httpurlconnection) url.openconnection(); conn.setreadtimeout(10000); conn.setconnecttimeout(15000); conn.setrequestmethod("get"); conn.setdoinput(true); int response=conn.getresponsecode(); log.d("downloadxml","the response returned is: "+response); is=conn.getinputstream(); inputstreamreader isr= new inputstreamreader(is); int charread; char[] inputbuffer=new char[buffer_size]; try { while ((charread=isr.read(inputbuffer))>0) { string readstring=string.copyvalueof(inputbuffer,0,charread); xmlcontents+=readstring; inputbuffer=new char[buffer_size]; } return xmlcontents; } catch (ioexception e){ e.printstacktrace(); return null; } } { if (is!=null) is.close(); } } } } the parsing class :
package com.katarina.top10appdownloader; import android.util.log; import org.xmlpull.v1.xmlpullparser; import org.xmlpull.v1.xmlpullparserfactory; import java.io.stringreader; import java.util.arraylist; public class parseapplications { private string data; private arraylist<application> applications; public parseapplications(string xmldata) { data = xmldata; applications = new arraylist<application>(); } public arraylist<application> getapplications() { return applications; } public boolean process() { boolean operationstatus = true; application currentrecord = null; boolean inentry = false; string textvalue = ""; try { xmlpullparserfactory factory = xmlpullparserfactory.newinstance(); factory.setnamespaceaware(true); xmlpullparser xpp = factory.newpullparser(); xpp.setinput(new stringreader(this.data)); int eventtype = xpp.geteventtype(); while (eventtype != xmlpullparser.end_document) { string tagname = xpp.getname(); if (eventtype == xmlpullparser.start_tag) { if (tagname.equalsignorecase("entry")) { inentry = true; currentrecord = new application(); } } else if (eventtype == xmlpullparser.text) { textvalue = xpp.gettext(); } else if (eventtype == xmlpullparser.end_tag) { if (inentry) { if (tagname.equalsignorecase("entry")) { applications.add(currentrecord); inentry = false; } if (tagname.equalsignorecase("name")) { currentrecord.setname(textvalue); } else if (tagname.equalsignorecase("atrist")) { currentrecord.setartist(textvalue); } else if (tagname.equalsignorecase("releasedate")) { currentrecord.setreleasedate(textvalue); } } } eventtype=xpp.next(); } } catch (exception e) { e.printstacktrace(); operationstatus = false; } for(application app:applications) { log.d("log","*****************"); log.d("log",app.getname()); log.d("log",app.getartist()); log.d("log",app.getreleasedate()); } return operationstatus; } } thanks in advance ..
Comments
Post a Comment