java - NullPointerException onTextChanged -


this question has answer here:

i using http request data in json format loads image well. trying implement ontextchanged function crashes whenever enter alphabet edittext box.

/** asynctask parse json data , load listview */         private class listviewloadertask extends asynctask<string, void, simpleadapter>{             // doing parsing of xml data in non-ui thread             @override             protected simpleadapter doinbackground(string... strjson) {                 try{                     jobject = new jsonobject(strjson[0]);                     storejsonparser countryjsonparser = new storejsonparser();                     countryjsonparser.parse(jobject);                 }catch(exception e){                     log.d("json exception1",e.tostring());                 }                  // instantiating json parser class                 //storejsonparser countryjsonparser = new storejsonparser();                  try{                     // getting parsed data list construct                     countries = countryjsonparser.parse(jobject);                 }catch(exception e){                     log.d("exception",e.tostring());                 }                  // instantiating adapter store each items                 // r.layout.listview_layout defines layout of each item                 //adapter = new simpleadapter(getbasecontext(), countries, r.layout.restaurant_list, from, to);                 return adapter;             } 

onpostexecute

protected void onpostexecute(simpleadapter adapter) {              // setting adapter listview             adapter = new simpleadapter(getbasecontext(), countries, r.layout.restaurant_list, from, to);             log.d("what country", string.valueof(countries));             mlistview.setadapter(adapter);             searchbox = (edittext)findviewbyid(r.id.searchbox);              searchbox.addtextchangedlistener(new textwatcher() {                  public void ontextchanged(charsequence cs, int arg1, int arg2, int arg3) {                     // when user changed text                     choosecategory.this.adapter.getfilter().filter(cs);                 }                  public void beforetextchanged(charsequence arg0, int arg1, int arg2,                                               int arg3) {                     // todo auto-generated method stub                  }                  public void aftertextchanged(editable arg0) {                     // todo auto-generated method stub                     //choosecategory.this.adapter.getfilter().filter(arg0);                 }             });              for(int i=0;i<adapter.getcount();i++){                 hashmap<string, object> hm = (hashmap<string, object>) adapter.getitem(i);                 string imgurl = (string) hm.get("flag_path");                 imageloadertask imageloadertask = new imageloadertask();                  hashmap<string, object> hmdownload = new hashmap<string, object>();                 hm.put("flag_path",imgurl);                 hm.put("position", i);                  // starting imageloadertask download , populate image in listview                 imageloadertask.execute(hm);             }         }     } 

the error logcat:

java.lang.nullpointerexception             @ choosecategory$listviewloadertask$1.ontextchanged(choosecategory.java:196)             @ android.widget.textview.sendontextchanged(textview.java:7408)             @ android.widget.textview.handletextchanged(textview.java:7467)             @ android.widget.textview$changewatcher.ontextchanged(textview.java:9183)             @ android.text.spannablestringbuilder.sendtextchanged(spannablestringbuilder.java:962)             @ android.text.spannablestringbuilder.replace(spannablestringbuilder.java:496)             @ android.text.spannablestringbuilder.replace(spannablestringbuilder.java:435)             @ android.text.spannablestringbuilder.replace(spannablestringbuilder.java:30)             @ android.text.method.qwertykeylistener.onkeydown(qwertykeylistener.java:223)             @ android.text.method.textkeylistener.onkeydown(textkeylistener.java:136)             @ android.widget.textview.dokeydown(textview.java:5532)             @ android.widget.textview.onkeydown(textview.java:5343)             @ android.view.keyevent.dispatch(keyevent.java:2640)             @ android.view.view.dispatchkeyevent(view.java:7665)             @ android.view.viewgroup.dispatchkeyevent(viewgroup.java:1408)             @ android.view.viewgroup.dispatchkeyevent(viewgroup.java:1408)             @ android.view.viewgroup.dispatchkeyevent(viewgroup.java:1408)             @ android.view.viewgroup.dispatchkeyevent(viewgroup.java:1408)             @ com.android.internal.policy.impl.phonewindow$decorview.superdispatchkeyevent(phonewindow.java:2035)             @ com.android.internal.policy.impl.phonewindow.superdispatchkeyevent(phonewindow.java:1505)             @ android.app.activity.dispatchkeyevent(activity.java:2418)             @ com.android.internal.policy.impl.phonewindow$decorview.dispatchkeyevent(phonewindow.java:1962)             @ android.view.viewrootimpl$viewpostimeinputstage.processkeyevent(viewrootimpl.java:3852)             @ android.view.viewrootimpl$viewpostimeinputstage.onprocess(viewrootimpl.java:3826)             @ android.view.viewrootimpl$inputstage.deliver(viewrootimpl.java:3399)             @ android.view.viewrootimpl$inputstage.ondelivertonext(viewrootimpl.java:3449)             @ android.view.viewrootimpl$inputstage.forward(viewrootimpl.java:3418)             @ android.view.viewrootimpl$asyncinputstage.forward(viewrootimpl.java:3525)             @ android.view.viewrootimpl$inputstage.apply(viewrootimpl.java:3426)             @ android.view.viewrootimpl$asyncinputstage.apply(viewrootimpl.java:3582)             @ android.view.viewrootimpl$inputstage.deliver(viewrootimpl.java:3399)             @ android.view.viewrootimpl$inputstage.ondelivertonext(viewrootimpl.java:3449)             @ android.view.viewrootimpl$inputstage.forward(viewrootimpl.java:3418)             @ android.view.viewrootimpl$inputstage.apply(viewrootimpl.java:3426)             @ android.view.viewrootimpl$inputstage.deliver(viewrootimpl.java:3399)             @ android.view.viewrootimpl$inputstage.ondelivertonext(viewrootimpl.java:3449)             @ android.view.viewrootimpl$inputstage.forward(viewrootimpl.java:3418)             @ android.view.viewrootimpl$asyncinputstage.forward(viewrootimpl.java:3558)             @ android.view.viewrootimpl$imeinputstage.onfinishedinputevent(viewrootimpl.java:3718)             @ android.view.inputmethod.inputmethodmanager$pendingevent.run(inputmethodmanager.java:2010)             @ android.view.inputmethod.inputmethodmanager.invokefinishedinputeventcallback(inputmethodmanager.java:1704)             @ android.view.inputmethod.inputmethodmanager.finishedinputevent(inputmethodmanager.java:1695)             @ android.view.inputmethod.inputmethodmanager$imeinputeventsender.oninputeventfinished(inputmethodmanager.java:1987)             @ android.view.inputeventsender.dispatchinputeventfinished(inputeventsender.java:141)             @ android.os.messagequeue.nativepollonce(native method)             @ android.os.messagequeue.next(messagequeue.java:138)             @ android.os.looper.loop(looper.java:123)             @ android.app.activitythread.main(activitythread.java:5017)             @ java.lang.reflect.method.invokenative(native method)             @ java.lang.reflect.method.invoke(method.java:515)             @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:779)             @ com.android.internal.os.zygoteinit.main(zygoteinit.java:595)             @ dalvik.system.nativestart.main(native method)     java.lang.nullpointerexception                 @ choosecategory$listviewloadertask$1.ontextchanged 

please dont make duplicate. have seen post , still can't fix it. why i'm posting here.

this full code choosecategory.java

public class choosecategory extends activity {     listview mlistview;     edittext searchbox;     simpleadapter adapter;     jsonobject jobject;     storejsonparser countryjsonparser = new storejsonparser();     // list object store parsed countries list     list<hashmap<string, object>> countries = null;     // keys used in hashmap     string[] = { "country","flag","details"};     // ids of views in listview_layout     int[] = { r.id.storename,r.id.icon,r.id.details};        @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          // getting reference listview of activity_main         mlistview = (listview) findviewbyid(r.id.list);          // url json data         string strurl = "http://10.0.2.2/get_stores.php";          // creating new non-ui thread task download json data         downloadtask downloadtask = new downloadtask();          // starting download process         downloadtask.execute(strurl);       }      /** method download json data url */     private string downloadurl(string strurl) throws ioexception {         string data = "";         inputstream istream = null;         try{             url url = new url(strurl);              // creating http connection communicate url             httpurlconnection urlconnection = (httpurlconnection) url.openconnection();              // connecting url             urlconnection.connect();              // reading data url             istream = urlconnection.getinputstream();              bufferedreader br = new bufferedreader(new inputstreamreader(istream));              stringbuffer sb  = new stringbuffer();              string line = "";             while( ( line = br.readline())  != null){                 sb.append(line);             }              data = sb.tostring();              br.close();          }catch(exception e){             log.d("exception:", e.tostring());         }finally{             istream.close();         }          return data;     }      /** asynctask download json data */     private class downloadtask extends asynctask<string, integer, string>{         string data = null;         @override         protected string doinbackground(string... url) {             try{                 data = downloadurl(url[0]);             }catch(exception e){                 log.d("background task",e.tostring());             }             return data;         }          @override         protected void onpostexecute(string result) {              // parsing of xml data done in non-ui thread             listviewloadertask listviewloadertask = new listviewloadertask();              // start parsing xml data             listviewloadertask.execute(result);         }     }      /** asynctask parse json data , load listview */         private class listviewloadertask extends asynctask<string, void, simpleadapter>{             // doing parsing of xml data in non-ui thread             @override             protected simpleadapter doinbackground(string... strjson) {                 try{                     jobject = new jsonobject(strjson[0]);                     storejsonparser countryjsonparser = new storejsonparser();                     countryjsonparser.parse(jobject);                 }catch(exception e){                     log.d("json exception1",e.tostring());                 }                  // instantiating json parser class                 //storejsonparser countryjsonparser = new storejsonparser();                  try{                     // getting parsed data list construct                     countries = countryjsonparser.parse(jobject);                 }catch(exception e){                     log.d("exception",e.tostring());                 }                  // instantiating adapter store each items                 // r.layout.listview_layout defines layout of each item                 //adapter = new simpleadapter(getbasecontext(), countries, r.layout.restaurant_list, from, to);                 return adapter;             }          /** invoked android on "doinbackground" executed */         @override         protected void onpostexecute(simpleadapter adapter) {              // setting adapter listview             adapter = new simpleadapter(getbasecontext(), countries, r.layout.restaurant_list, from, to);             log.d("what country", string.valueof(countries));             mlistview.setadapter(adapter);             searchbox = (edittext)findviewbyid(r.id.searchbox);              searchbox.addtextchangedlistener(new textwatcher() {                  public void ontextchanged(charsequence cs, int arg1, int arg2, int arg3) {                     // when user changed text                     choosecategory.this.adapter.getfilter().filter(cs);                 }                  public void beforetextchanged(charsequence arg0, int arg1, int arg2,                                               int arg3) {                     // todo auto-generated method stub                  }                  public void aftertextchanged(editable arg0) {                     // todo auto-generated method stub                     //choosecategory.this.adapter.getfilter().filter(arg0);                 }             });              for(int i=0;i<adapter.getcount();i++){                 hashmap<string, object> hm = (hashmap<string, object>) adapter.getitem(i);                 string imgurl = (string) hm.get("flag_path");                 imageloadertask imageloadertask = new imageloadertask();                  hashmap<string, object> hmdownload = new hashmap<string, object>();                 hm.put("flag_path",imgurl);                 hm.put("position", i);                  // starting imageloadertask download , populate image in listview                 imageloadertask.execute(hm);             }         }     }      /** asynctask download , load image in listview */     private class imageloadertask extends asynctask<hashmap<string, object>, void, hashmap<string, object>>{          @override         protected hashmap<string, object> doinbackground(hashmap<string, object>... hm) {              inputstream istream=null;             string imgurl = (string) hm[0].get("flag_path");             int position = (integer) hm[0].get("position");              url url;             try {                 url = new url(imgurl);                  // creating http connection communicate url                 httpurlconnection urlconnection = (httpurlconnection) url.openconnection();                  // connecting url                 urlconnection.connect();                  // reading data url                 istream = urlconnection.getinputstream();                  // getting caching directory                 file cachedirectory = getbasecontext().getcachedir();                  // temporary file store downloaded image                 file tmpfile = new file(cachedirectory.getpath() + "/wpta_"+position+".png");                  // fileoutputstream temporary file                 fileoutputstream foutstream = new fileoutputstream(tmpfile);                  // creating bitmap downloaded inputstream                 bitmap b = bitmapfactory.decodestream(istream);                  // writing bitmap temporary file png file                 b.compress(bitmap.compressformat.png,100, foutstream);                  // flush fileoutputstream                 foutstream.flush();                  //close fileoutputstream                 foutstream.close();                  // create hashmap object store image path , position in listview                 hashmap<string, object> hmbitmap = new hashmap<string, object>();                  // storing path temporary image file                 hmbitmap.put("flag",tmpfile.getpath());                  // storing position of image in listview                 hmbitmap.put("position",position);                  // returning hashmap object containing image path , position                 return hmbitmap;              }catch (exception e) {                 e.printstacktrace();             }             return null;         }          @override         protected void onpostexecute(hashmap<string, object> result) {             // getting path downloaded image             string path = (string) result.get("flag");              // getting position of downloaded image             int position = (integer) result.get("position");              // getting adapter of listview             simpleadapter adapter = (simpleadapter ) mlistview.getadapter();              // getting hashmap object @ specified position of listview             hashmap<string, object> hm = (hashmap<string, object>) adapter.getitem(position);              // overwriting existing path in adapter             hm.put("flag",path);              // noticing listview dataset changes             adapter.notifydatasetchanged();         }     }      @override     public boolean oncreateoptionsmenu(menu menu) {         //getmenuinflater().inflate(r.menu.menu_main, menu);         return true;     }  } 

do have class variable named adapter ? seems choosecategory.this.adapter not local variables adapter = new simpleadapter(getbasecontext(), countries, r.layout.restaurant_list, from, to);

you should name class variable madapter.


Comments

Popular posts from this blog

How to connect android app to App engine -

gcc - MinGW's ld cannot perform PE operations on non PE output file -

php - display validation error message next to the textbox in codeigniter -