android - Null Pointer Exception: setinput function for Xmlpullparser assigning null value with StringReader -


i'm having problem parser assigning null value when object field checked (feed variable) not null. code below. appreciated.

line causing error is: xpp.setinput( new stringreader ( mworditem.getfeed()) );

package com.example.wffd;  import android.os.bundle; import android.os.asynctask; import android.app.activity; import android.view.view; import android.widget.button; import android.widget.textview; import android.view.menu;  import java.io.bufferedinputstream; import java.io.ioexception; import java.io.inputstream; import java.io.bufferedreader; import java.io.inputstreamreader; import java.io.stringreader;  import java.net.url; import java.net.httpurlconnection; import org.xmlpull.v1.xmlpullparser; import org.xmlpull.v1.xmlpullparserexception; import org.xmlpull.v1.xmlpullparserfactory;     public class wffdhomeactivity extends activity {      button updatebutton;     textview wdtextview, cwtextview;     worditem myworditem ;       @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_wffdhome);         updatebutton = (button)findviewbyid(r.id.button1);         wdtextview = (textview)findviewbyid(r.id.textview2);         cwtextview = (textview)findviewbyid(r.id.textview3);         myworditem= new worditem();           updatebutton.setonclicklistener(new view.onclicklistener() {       public void onclick(view view) {         try {             url url = new url("http://www.dictionary.reference.com/wordoftheday/wotd.rss");             httpurlconnection urlconnection = (httpurlconnection) url.openconnection();              new feedgrab(myworditem).execute(urlconnection);             update_screen(myworditem);              cwtextview.settext(myworditem.getword());             wdtextview.settext(myworditem.getdefinition());         } catch (xmlpullparserexception e) {             // todo auto-generated catch block             e.printstacktrace();         } catch (ioexception e) {             // todo auto-generated catch block             e.printstacktrace();         }       }       });      }      private class feedgrab extends asynctask<httpurlconnection,void,boolean>{          worditem aworditem;          public feedgrab( worditem mworditem){              this.aworditem=mworditem;         }          protected boolean doinbackground(httpurlconnection... urls) {             try {                 inputstream in = new bufferedinputstream(urls[0].getinputstream());                 aworditem.setfeed(readstream(in));              }             catch(ioexception e)             {                 e.printstacktrace();             }             {                 urls[0].disconnect();            }             return true;         }           private string readstream(inputstream is) throws ioexception {                 stringbuilder sb = new stringbuilder();                   bufferedreader r = new bufferedreader(new inputstreamreader(is),1000);                   (string line = r.readline(); line != null; line =r.readline()){                       sb.append(line);                   }                   is.close();                   return sb.tostring();             }       }     public void update_screen( worditem mworditem)throws xmlpullparserexception, ioexception     {          xmlpullparserfactory factory = xmlpullparserfactory.newinstance();          factory.setnamespaceaware(true);           xmlpullparser xpp = factory.newpullparser();          xpp.setinput( new stringreader ( mworditem.getfeed()) );            int eventtype = xpp.geteventtype();          string tag_id="item";          boolean in_item = false,in_description = false;           string tag_def="description";             while (eventtype != xmlpullparser.end_document) {          if((eventtype == xmlpullparser.start_tag) )           {             if(tag_id.equalsignorecase(xpp.getname()))                       {                         in_item = true;                     }else if(tag_def.equalsignorecase(xpp.getname()))                     {                         in_description= true;                     }             } else if(eventtype == xmlpullparser.end_tag) {               system.out.println("end tag "+xpp.getname());            } else if((eventtype == xmlpullparser.text ) &&(in_description & in_item)) {               mworditem.processstring(xpp.gettext());               in_description=false;               in_item = false;           }           eventtype = xpp.next();          }          system.out.println("end document");      }       @override     public boolean oncreateoptionsmenu(menu menu) {         // inflate menu; adds items action bar if present.         getmenuinflater().inflate(r.menu.wffdhome, menu);         return true;     }     } 

worditemclass:

package com.example.wffd;  public class worditem {     private string word;     private string definition;     private string feed;      public string getfeed() {         return feed;     }     public void setfeed(string feed) {         this.feed = feed;     }      public string getword() {         return word;     }     public void setword(string word) {         this.word = word;     }     public string getdefinition() {         return definition;     }     public void setdefinition(string definition) {         this.definition = definition;     }     public void processstring(string text){         string[] phrase = text.split(":");     this.setword(phrase[0]);     this.setdefinition(phrase[1]);      }   } 

edit: not sure if stack trace.. here:

thread [<1> main] (suspended (exception nullpointerexception))       <vm not provide monitor information>        wffdhomeactivity.update_screen(worditem) line: 110       wffdhomeactivity$1.onclick(view) line: 51        button(view).performclick() line: 4204       view$performclick.run() line: 17355      handler.handlecallback(message) line: 725        viewrootimpl$viewroothandler(handler).dispatchmessage(message) line: 92      looper.loop() line: 137      activitythread.main(string[]) line: 5041         method.invokenative(object, object[], class, class[], class, int, boolean) line: not available [native method]       method.invoke(object, object...) line: 511       zygoteinit$methodandargscaller.run() line: 793       zygoteinit.main(string[]) line: 560  

**update: using debugger mworditem.getfeed() returning null yet feed string contains data. not sure what's going on here

**update @andy256:i thought using aworditem reference myworditem , modifying feed variable had solved problem apparently that's not did. how pass value async thread? tried passing value through onpostexecute no success.

protected void onpostexecute(worditem result) {

        this.aworditem=result;         return;     } 

the stack trace shows

wffdhomeactivity.update_screen(worditem) line: 110
wffdhomeactivity$1.onclick(view) line: 51

so on line 110 null:

xpp.setinput( new stringreader ( mworditem.getfeed()) ); 

since xpp seems set, @ mworditem. comes call @ line 51, myworditem passed. in code posted, myworditem never set.

so, code have posted: myworditem null.