google maps - NullPointerException error, in android.text.Editable android.widget.EditText.getText() -


i developing android apps. had problem. implemented 2 fragments in floating bar. , each floating bar button connected moving map , print listing. when clicked going map, print google maps normally. , in state, press button move home screen in smartphone. , when run app, print google map. but, in stae, if clicked on google location search @ top in application, app crash...

the error message follows: 08-20 09:56:48.698 16761-16761/songjong.com.seongnamgiftcard e/androidruntime: fatal exception: main process: songjong.com.seongnamgiftcard, pid: 16761 java.lang.nullpointerexception: attempt invoke virtual method 'android.text.editable android.widget.edittext.gettext()' on null object reference @ com.google.android.gms.location.places.ui.placeautocompletefragment.zzwc(unknown source) @ com.google.android.gms.location.places.ui.placeautocompletefragment.zzb(unknown source) @ com.google.android.gms.location.places.ui.zzc.onclick(unknown source) @ android.view.view.performclick(view.java:6261) @ android.widget.textview.performclick(textview.java:11159) @ android.view.view$performclick.run(view.java:23752) @ android.os.handler.handlecallback(handler.java:751) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:154) @ android.app.activitythread.main(activitythread.java:6776) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1496) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1386)

xml code :

  <android.support.v7.widget.cardview         xmlns:card_view="http://schemas.android.com/apk/res-auto"         android:name="@+id/card_view"         android:layout_width="match_parent"         android:layout_height="50dp"         android:layout_gravity="center"         card_view:cardcornerradius="4dp"         android:layout_alignparenttop="true"         android:layout_alignparentleft="true"         android:layout_alignparentstart="true">          <fragment             android:id="@+id/place_autocomplete_fragment"             android:layout_width="match_parent"             android:layout_height="match_parent"             android:name="com.google.android.gms.location.places.ui.placeautocompletefragment">         </fragment>     </android.support.v7.widget.cardview> 

googlemapfragment.java

import android.manifest; import android.content.pm.packagemanager; import android.location.location; import android.os.build; import android.os.bundle; import android.support.annotation.nonnull; import android.support.annotation.nullable; import android.support.v4.app.activitycompat; import android.support.v4.app.fragment; import android.support.v4.app.fragmentmanager; import android.support.v4.app.fragmenttransaction; import android.support.v4.content.contextcompat; import android.util.log; import android.view.inflateexception; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.autocompletetextview;  import com.google.android.gms.common.connectionresult; import com.google.android.gms.common.api.googleapiclient; import com.google.android.gms.common.api.pendingresult;ac import com.google.android.gms.common.api.resultcallback; import com.google.android.gms.common.api.status; import com.google.android.gms.location.locationlistener; import com.google.android.gms.location.locationrequest; import com.google.android.gms.location.locationservices; import com.google.android.gms.location.places.place; import com.google.android.gms.location.places.placelikelihood; import com.google.android.gms.location.places.placelikelihoodbuffer; import com.google.android.gms.location.places.places; import com.google.android.gms.location.places.ui.placeautocompletefragment; import com.google.android.gms.location.places.ui.placeselectionlistener; import com.google.android.gms.maps.cameraupdatefactory; import com.google.android.gms.maps.googlemap; import com.google.android.gms.maps.mapview; import com.google.android.gms.maps.mapsinitializer; import com.google.android.gms.maps.onmapreadycallback; import com.google.android.gms.maps.supportmapfragment; import com.google.android.gms.maps.model.bitmapdescriptorfactory; import com.google.android.gms.maps.model.latlng; import com.google.android.gms.maps.model.marker; import com.google.android.gms.maps.model.markeroptions;  import songjong.com.seongnamgiftcard.mainactivity; import songjong.com.seongnamgiftcard.r;  import static songjong.com.seongnamgiftcard.mainactivity.appaddress;  /**  * created dongwook on 2017. 8. 9..  */      public class googlemapfragment extends fragment implements onmapreadycallback, googleapiclient.connectioncallbacks,         googleapiclient.onconnectionfailedlistener,locationlistener{      private static final latlng default_location = new latlng(37.56, 126.97);     private static final string tag = "googlemap";     private static final int gps_enable_request_code = 2001;     private static final int permissions_request_access_fine_location = 2002;     private static final int update_interval_ms = 15000;     private static final int fastest_update_interval_ms = 15000;      private googlemap googlemap = null;     private mapview mapview = null;     private googleapiclient googleapiclient = null;     private marker currentmarker = null;      private final static int maxentries = 5;     private string[] likelyplacenames = null;     private string[] likelyaddresses = null;     private string[] likelyattributions = null;     private latlng[] likelylatlngs = null;     public placeautocompletefragment autocompletefragment;     private static int searchcnt=0;     private static view layout;      public void setcurrentlocation(location location, string markertitle, string markersnippet) {         log.i(tag, "setcurrentlocation()");          if ( currentmarker != null ) currentmarker.remove();          if (location != null) {             //현재위치의 위도 경도 가져옴             log.d(tag,"location!=null");             latlng currentlocation = new latlng( location.getlatitude(), location.getlongitude());             markeroptions markeroptions = new markeroptions();             markeroptions.position(currentlocation);             markeroptions.title(markertitle);             markeroptions.snippet(markersnippet);             markeroptions.draggable(true);             markeroptions.icon(bitmapdescriptorfactory.defaultmarker(bitmapdescriptorfactory.hue_blue));             currentmarker = this.googlemap.addmarker(markeroptions);             this.googlemap.movecamera(cameraupdatefactory.newlatlng(currentlocation));             return;         }         log.d(tag,"location==null");         markeroptions markeroptions = new markeroptions();         markeroptions.position(default_location);         markeroptions.title(markertitle);         markeroptions.snippet(markersnippet);         markeroptions.draggable(true);         markeroptions.icon(bitmapdescriptorfactory.defaultmarker(bitmapdescriptorfactory.hue_red));         currentmarker = this.googlemap.addmarker(markeroptions);          this.googlemap.movecamera(cameraupdatefactory.newlatlng(default_location));     }     @override     public void oncreate(@nullable bundle savedinstancestate) {         log.i(tag, "oncreate()");         super.oncreate(savedinstancestate);         googleapiclient = new googleapiclient.builder(getactivity())                 .enableautomanage(getactivity() /* fragmentactivity */,                             /* onconnectionfailedlistener */)                 .addconnectioncallbacks(this)                 .addapi(locationservices.api)                 .addapi(places.geo_data_api)                 .addapi(places.place_detection_api)                 .build();         googleapiclient.connect();     }     @nullable     @override     public view oncreateview(layoutinflater inflater, @nullable viewgroup container, @nullable bundle savedinstancestate) {         log.i(tag, "oncreateview()");         if(layout==null){             try {                 layout = inflater.inflate(r.layout.map_fragment, container, false);             }catch(inflateexception e){}         }         mapview = (mapview)layout.findviewbyid(r.id.map);         mapview.getmapasync(this);         return layout;     }     //duplicated id 해결 코드     public void onviewcreated(view view, @nullable bundle savedinstancestate) {         log.i(tag, "onviewcreated()");         super.onviewcreated(view, savedinstancestate);         log.d(tag,"viewcreated");         searchcnt=0;         fragmentmanager fm = getchildfragmentmanager();         supportmapfragment mapfragment = (supportmapfragment) fm.findfragmentbytag("mapfragment");         if (mapfragment == null) {             mapfragment = new supportmapfragment();             fragmenttransaction ft = fm.begintransaction();             ft.add(r.id.mapfragmentcontainer, mapfragment, "mapfragment");             ft.commit();             fm.executependingtransactions();         }         mapfragment.getmapasync(this);     }      @override     public void onstart() {         log.i(tag, "onstart()");         super.onstart();         mapview.onstart();     }      @override     public void onstop() {         log.i(tag, "onstop()");         super.onstop();         mapview.onstop();          if (googleapiclient != null && googleapiclient.isconnected()){             googleapiclient.disconnect();             log.d("tag","api null");         }     }      @override     public void onsaveinstancestate(bundle outstate) {         log.i(tag, "onsaveinstancestate()");         super.onsaveinstancestate(outstate);         mapview.onsaveinstancestate(outstate);     }      @override     public void onresume() {         log.i(tag, "onresume()");         super.onresume();         mapview.onresume();          if ( googleapiclient != null)             googleapiclient.connect();      }      @override     public void onpause() {         log.i(tag, "onpause()");         super.onpause();         mapview.onpause();          if ( googleapiclient != null && googleapiclient.isconnected()) {             locationservices.fusedlocationapi.removelocationupdates(googleapiclient, this);             googleapiclient.disconnect();         }         //지도 fragment 두번 들어왔을경우 터지는 에러 코드 수정         googleapiclient.stopautomanage(getactivity());         googleapiclient.disconnect();     }      @override     public void onlowmemory() {         log.i(tag, "onlowmemory()");         super.onlowmemory();         mapview.onlowmemory();     }     @override     public void ondestroy() {         log.i(tag, "ondestroy()");         super.ondestroy();         mapview.onlowmemory();          if (googleapiclient != null ) {             googleapiclient.unregisterconnectioncallbacks(this);             googleapiclient.unregisterconnectionfailedlistener(this);              if (googleapiclient.isconnected()) {                 locationservices.fusedlocationapi.removelocationupdates(googleapiclient, this);                 googleapiclient.disconnect();             }         }     }      @override     public void onactivitycreated(@nullable bundle savedinstancestate) {         log.i(tag, "onactivitycreated()");         super.onactivitycreated(savedinstancestate);         mapsinitializer.initialize(getactivity().getapplicationcontext());         autocompletefragment = (placeautocompletefragment) getactivity().getfragmentmanager().findfragmentbyid(r.id.place_autocomplete_fragment);         try{         autocompletefragment.setonplaceselectedlistener(new placeselectionlistener() {             @override             public void onplaceselected(place place) {                 log.i(tag, "onplaceselected()");                 log.d(tag,"해당위치로 이동");                 location location = new location("");                 location.setlatitude(place.getlatlng().latitude);                 location.setlongitude(place.getlatlng().longitude);                  setcurrentlocation(location, place.getname().tostring(), place.getaddress().tostring());                 appaddress=place.getaddress().tostring();                 mainactivity mainactivity = (mainactivity)getactivity();                 mainactivity.updatecurrentplacetext(appaddress);             }             @override             public void onerror(status status) {                 log.i(tag, "an error occurred: " + status);             }         });}catch(nullpointerexception e){}         if(mapview != null)         {             mapview.oncreate(savedinstancestate);         }     }      @override     public void onmapready(googlemap googlemap) {         log.i(tag, "onmapready()");         // onmapreadycallback implements 해야 mapview.getmapasync(this); 사용가능. 가 onmapreadycallback         this.googlemap = googlemap;          //런타임 퍼미션 요청 대화상자나 gps 활성 요청 대화상자 보이기전에 지도의 초기위치를 서울로 이동         setcurrentlocation(null, "위치정보 가져올 수 없음", "위치 퍼미션과 gps 활성 여부 확인");          //나침반이 나타나도록 설정         googlemap.getuisettings().setcompassenabled(true);         // 매끄럽게 이동함         googlemap.animatecamera(cameraupdatefactory.zoomto(15));          //  api 23 이상이면 런타임 퍼미션 처리 필요         if (build.version.sdk_int >= build.version_codes.m) {             // 사용권한체크             int hasfinelocationpermission = contextcompat.checkselfpermission(getactivity(), manifest.permission.access_fine_location);              if ( hasfinelocationpermission == packagemanager.permission_denied) {                 //사용권한이 없을경우                 //권한 재요청                 activitycompat.requestpermissions(getactivity(), new string[]{manifest.permission.access_fine_location}, permissions_request_access_fine_location);             } else {                 //사용권한이 있는경우                 if ( googleapiclient == null) {                     buildgoogleapiclient();                 }                  if ( activitycompat.checkselfpermission(getactivity(), manifest.permission.access_fine_location) == packagemanager.permission_granted)                 {                     googlemap.setmylocationenabled(true);                 }             }         } else {              if ( googleapiclient == null) {                 buildgoogleapiclient();             }              googlemap.setmylocationenabled(true);         }       }      private void buildgoogleapiclient() {         log.i(tag, "buildgoogleapiclient()");         googleapiclient = new googleapiclient.builder(getactivity())                 .addconnectioncallbacks(this)                 .addonconnectionfailedlistener(this)                 .addapi(locationservices.api)                 .addapi(places.geo_data_api)                 .addapi(places.place_detection_api)                 .enableautomanage(getactivity(), this)                 .build();         googleapiclient.connect();     }     @override     public void onconnected(@nullable bundle bundle) {         log.i(tag, "onconnected()");         locationrequest locationrequest = new locationrequest();         locationrequest.setpriority(locationrequest.priority_high_accuracy);         locationrequest.setinterval(update_interval_ms);         locationrequest.setfastestinterval(fastest_update_interval_ms);          if ( build.version.sdk_int >= build.version_codes.m) {             if ( activitycompat.checkselfpermission(getactivity(),                     manifest.permission.access_fine_location) == packagemanager.permission_granted) {                  locationservices.fusedlocationapi                         .requestlocationupdates(googleapiclient, locationrequest, this);             }         } else {             locationservices.fusedlocationapi                     .requestlocationupdates(googleapiclient, locationrequest, this);              this.googlemap.getuisettings().setcompassenabled(true);             this.googlemap.animatecamera(cameraupdatefactory.zoomto(15));         }     }      @override     public void onconnectionsuspended(int cause) {         log.i(tag, "onconnectionsuspended()");         if ( cause ==  cause_network_lost )             log.e(tag, "onconnectionsuspended(): google play services " +                     "connection lost.  cause: network lost.");         else if (cause == cause_service_disconnected )             log.e(tag,"onconnectionsuspended():  google play services " +                     "connection lost.  cause: service disconnected");      }      @override     public void onconnectionfailed(@nonnull connectionresult connectionresult) {         log.i(tag, "onconnectionfailed()");         location location = new location("");         location.setlatitude(default_location.latitude);         location.setlongitude((default_location.longitude));          setcurrentlocation(location, "위치정보 가져올 수 없음",                 "위치 퍼미션과 gps활성 여부 확인");     }      @override     public void onlocationchanged(location location) {         log.i(tag, "onlocationchanged()");          if(searchcnt==0){              searchcurrentplaces();              searchcnt++;          }      }      public void searchcurrentplaces() {         log.i(tag, "searchcurrentplaces()");         @suppresswarnings("missingpermission")         pendingresult<placelikelihoodbuffer> result = places.placedetectionapi                 .getcurrentplace(googleapiclient, null);         result.setresultcallback(new resultcallback<placelikelihoodbuffer>(){             @override             public void onresult(placelikelihoodbuffer likelyplaces) {                 log.i(tag, "currentplaces");                 int = 0;                 likelyplacenames = new string[maxentries];                 likelyaddresses = new string[maxentries];                 likelyattributions = new string[maxentries];                 likelylatlngs = new latlng[maxentries];                 log.i(tag, "1");                 log.i(tag,""+likelyplaces);                 for(placelikelihood placelikelihood : likelyplaces) {                     log.i(tag, string.format("place '%s' has likelihood: %g",placelikelihood.getplace().getname(),                             placelikelihood.getlikelihood()));                     likelyplacenames[i] = (string) placelikelihood.getplace().getname();                     likelyaddresses[i] = (string) placelikelihood.getplace().getaddress();                     likelyattributions[i] = (string) placelikelihood.getplace().getattributions();                     likelylatlngs[i] = placelikelihood.getplace().getlatlng();                     log.i(tag, "2");                     i++;                     if(i > maxentries - 1 ) {                         break;                     }                 }                 likelyplaces.release();                  location location = new location("");                 location.setlatitude(likelylatlngs[0].latitude);                 location.setlongitude(likelylatlngs[0].longitude);                 setcurrentlocation(location, likelyplacenames[0], likelyaddresses[0]);             }         });      }     public void ondestroyview() {         log.d(tag,"ondestroyview()");         super.ondestroyview();         if(layout!=null) {             viewgroup parent = (viewgroup) layout.getparent();             if (parent != null) {                 parent.removeview(layout);             }          }     } } 

i appreciate if let me know how fix it.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -