java - Driving distance and travel time google maps V2 error -
i have code in java, code error, , code driving distance , travel time duration between 2 locations in google map android api v2 :
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); try { initilizemap(); tvdistanceduration = (textview) findviewbyid(r.id.tv_distance_time); // initializing markerpoints = new arraylist<latlng>(); // getting reference supportmapfragment of activity_main supportmapfragment fm = (supportmapfragment)getsupportfragmentmanager().findfragmentbyid(r.id.map); // getting map supportmapfragment googlemap = fm.getmap(); // enable mylocation button in map googlemap.setmylocationenabled(true); googlemap.setonmapclicklistener(new onmapclicklistener() { public void onmapclick(latlng point) { // todo auto-generated method stub // 2 locations if(markerpoints.size()>1){ markerpoints.clear(); googlemap.clear(); } // adding new item arraylist markerpoints.add(point); // creating markeroptions markeroptions options = new markeroptions(); // setting position of marker options.position(point); /** * start location, color of marker green , * end location, color of marker red. */ if(markerpoints.size()==1){ options.icon(bitmapdescriptorfactory.defaultmarker(bitmapdescriptorfactory.hue_green)); }else if(markerpoints.size()==2){ options.icon(bitmapdescriptorfactory.defaultmarker(bitmapdescriptorfactory.hue_red)); } googlemap.addmarker(options); // checks, whether start , end locations captured if(markerpoints.size() >= 2){ latlng origin = markerpoints.get(0); latlng dest = markerpoints.get(1); // getting url google directions api string url = getdirectionsurl(origin, dest); downloadtask downloadtask = new downloadtask(); // start downloading json data google directions api downloadtask.execute(url); } } }); //coding map googlemap.setmaptype(googlemap.map_type_normal); googlemap.setmylocationenabled(true); googlemap.getuisettings().setzoomcontrolsenabled(false); googlemap.getuisettings().setmylocationbuttonenabled(true); googlemap.getuisettings().setcompassenabled(true); googlemap.getuisettings().setrotategesturesenabled(true); googlemap.getuisettings().setzoomgesturesenabled(true); googlemap.getmylocation(); double latitude = -6.941830; double longitude = 107.628480; markeroptions marker = new markeroptions().position( new latlng(latitude, longitude)) .title("i'm here"); log.e("random", "> " + latitude + ", " + longitude); marker.icon(bitmapdescriptorfactory .defaultmarker(bitmapdescriptorfactory.hue_azure)); googlemap.addmarker(marker); //setting zoom level cameraposition cameraposition = new cameraposition.builder() .target(new latlng(latitude, longitude)).zoom(16).build(); googlemap.animatecamera(cameraupdatefactory .newcameraposition(cameraposition)); } catch (exception e) { e.printstacktrace(); } //coding slide atau drawable mtitle = mdrawertitle = gettitle(); // load slide menu item navmenutitles = getresources().getstringarray(r.array.nav_drawer_items); // ngambil nav drawer icons drawer resources navmenuicons = getresources() .obtaintypedarray(r.array.nav_drawer_icons); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlist = (listview) findviewbyid(r.id.list_slidermenu); navdraweritems = new arraylist<navdraweritem>(); // home navdraweritems.add(new navdraweritem(navmenutitles[0], navmenuicons.getresourceid(0, -1))); // kereta navdraweritems.add(new navdraweritem(navmenutitles[1], navmenuicons.getresourceid(1, -1))); // bis navdraweritems.add(new navdraweritem(navmenutitles[2], navmenuicons.getresourceid(2, -1))); // pesawat navdraweritems.add(new navdraweritem(navmenutitles[3], navmenuicons.getresourceid(3, -1))); // kapal laut navdraweritems.add(new navdraweritem(navmenutitles[4], navmenuicons.getresourceid(4, -1))); // tempat/place navdraweritems.add(new navdraweritem(navmenutitles[5], navmenuicons.getresourceid(5, -1))); // navdraweritems.add(new navdraweritem(navmenutitles[6], navmenuicons.getresourceid(6, -1))); navmenuicons.recycle(); mdrawerlist.setonitemclicklistener(new slidemenuclicklistener()); // setting nav drawer list adapter adapter = new navdrawerlistadapter(getapplicationcontext(), navdraweritems); mdrawerlist.setadapter(adapter); // enabling action bar app icon , behaving toggle button getactionbar().setdisplayhomeasupenabled(true); getactionbar().sethomebuttonenabled(true); mdrawertoggle = new actionbardrawertoggle(this, mdrawerlayout, r.drawable.ic_drawer, r.string.app_name, r.string.app_name ) { public void ondrawerclosed(view view) { getactionbar().settitle(mtitle); // buat show invalidateoptionsmenu(); } public void ondraweropened(view drawerview) { getactionbar().settitle(mdrawertitle); // buat hide invalidateoptionsmenu(); } }; mdrawerlayout.setdrawerlistener(mdrawertoggle); if (savedinstancestate == null) { displayview(0); } } private class slidemenuclicklistener implements listview.onitemclicklistener { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // buat display displayview(position); } } @override public boolean oncreateoptionsmenu(menu menu) { menuinflater inflater = getmenuinflater(); inflater.inflate(r.menu.main, menu); return super.oncreateoptionsmenu(menu); } @override public boolean onoptionsitemselected(menuitem item) { if (mdrawertoggle.onoptionsitemselected(item)) { return true; } switch (item.getitemid()) { case r.id.action_help: return true; case r.id.action_refresh: return true; case r.id.action_settings: return true; case r.id.action_search: return true; default: return super.onoptionsitemselected(item); } } @override public boolean onprepareoptionsmenu(menu menu) { boolean draweropen = mdrawerlayout.isdraweropen(mdrawerlist); menu.finditem(r.id.action_settings).setvisible(!draweropen); return super.onprepareoptionsmenu(menu); } private void displayview(int position) { fragment fragment = null; switch (position) { case 0: fragment = new homefragment(); break; case 1: fragment = new keretaapifragment(); break; case 2: fragment = new bisfragment(); break; case 3: fragment = new pesawatfragment(); break; case 4: fragment = new kapallautfragment(); break; case 5: fragment = new placefragment(); break; case 6: fragment = new aboutfragment(); break; default: break; } if (fragment != null) { fragmentmanager fragmentmanager = getfragmentmanager(); fragmentmanager.begintransaction() .replace(r.id.frame_container, fragment).commit(); mdrawerlist.setitemchecked(position, true); mdrawerlist.setselection(position); settitle(navmenutitles[position]); mdrawerlayout.closedrawer(mdrawerlist); } else { log.e("mainactivity", "gagal memuat"); } } @override public void settitle(charsequence title) { mtitle = title; getactionbar().settitle(mtitle); } @override protected void onpostcreate(bundle savedinstancestate) { super.onpostcreate(savedinstancestate); mdrawertoggle.syncstate(); } @override public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); mdrawertoggle.onconfigurationchanged(newconfig); } @override protected void onresume() { super.onresume(); initilizemap(); } private void initilizemap() { if (googlemap == null) { googlemap = ((mapfragment) getfragmentmanager().findfragmentbyid( r.id.map)).getmap(); // cek map status, bisa dubuat / tidak if (googlemap == null) { toast.maketext(getapplicationcontext(), "maaf maps anda gagal dimuat \n"+ "mungkin karena koneksi anda lelet :)", toast.length_short) .show(); } } } private string getdirectionsurl(latlng origin,latlng dest){ // origin of route string str_origin = "origin="+origin.latitude+","+origin.longitude; // destination of route string str_dest = "destination="+dest.latitude+","+dest.longitude; // sensor enabled string sensor = "sensor=false"; // building parameters web service string parameters = str_origin+"&"+str_dest+"&"+sensor; // output format string output = "json"; // building url web service string url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; return url; } /** method download json data url */ private string downloadurl(string strurl) throws ioexception{ string data = ""; inputstream istream = null; httpurlconnection urlconnection = null; try{ url url = new url(strurl); // creating http connection communicate url 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 while downloading url", e.tostring()); }finally{ istream.close(); urlconnection.disconnect(); } return data; } private class downloadtask extends asynctask<string, void, string>{ // downloading data in non-ui thread @override protected string doinbackground(string... url) { // storing data web service string data = ""; try{ // fetching data web service data = downloadurl(url[0]); }catch(exception e){ log.d("background task",e.tostring()); } return data; } // executes in ui thread, after execution of // doinbackground() @override protected void onpostexecute(string result) { super.onpostexecute(result); parsertask parsertask = new parsertask(); // invokes thread parsing json data parsertask.execute(result); } } private class parsertask extends asynctask<string, integer, list<list<hashmap<string,string>>> >{ // parsing data in non-ui thread @override protected list<list<hashmap<string, string>>> doinbackground(string... jsondata) { jsonobject jobject; list<list<hashmap<string, string>>> routes = null; try{ jobject = new jsonobject(jsondata[0]); directionsjsonparser parser = new directionsjsonparser(); // starts parsing data routes = parser.parse(jobject); }catch(exception e){ e.printstacktrace(); } return routes; } // executes in ui thread, after parsing process @override @suppresswarnings("unused") protected void onpostexecute(list<list<hashmap<string, string>>> result) { arraylist<latlng> points = null; polylineoptions lineoptions = null; markeroptions markeroptions = new markeroptions(); string distance = ""; string duration = ""; if(result.size()<1){ toast.maketext(getbasecontext(), "no points", toast.length_short).show(); return; } // traversing through routes for(int i=0;i<result.size();i++){ points = new arraylist<latlng>(); lineoptions = new polylineoptions(); // fetching i-th route list<hashmap<string, string>> path = result.get(i); // fetching points in i-th route for(int j=0;j<path.size();j++){ hashmap<string,string> point = path.get(j); if(j==0){ // distance list distance = (string)point.get("distance"); continue; }else if(j==1){ // duration list duration = (string)point.get("duration"); continue; } double lat = double.parsedouble(point.get("lat")); double lng = double.parsedouble(point.get("lng")); latlng position = new latlng(lat, lng); points.add(position); } // adding points in route lineoptions lineoptions.addall(points); lineoptions.width(2); lineoptions.color(color.red); } tvdistanceduration.settext("distance:"+distance + ", duration:"+duration); // drawing polyline in google map i-th route googlemap.addpolyline(lineoptions); } }
and error in:
supportmapfragment fm = (supportmapfragment)getsupportfragmentmanager().findfragmentbyid(r.id.map);
error information "the method getsupportfragmentmanager() undefined type mainactivity" please me
i guess mainactivity extends activity instead of fragment activity.
also have
initilizemap();
in have
googlemap = ((mapfragment) getfragmentmanager().findfragmentbyid( r.id.map)).getmap();
while have
supportmapfragment fm = (supportmapfragment)getsupportfragmentmanager().findfragmentbyid(r.id.map); // getting map supportmapfragment googlemap = fm.getmap();
you initializing map object twice. once use mapfragment
, use supportmapfragment
.
to fix
check min sdk version in manifest. if below 11 extend fragmentactivity
, use supportmapfragment
.
secondly check availability of google play services , there no need initialize map object twice.
Comments
Post a Comment