json - Change the icon of multiple Android Google maps markers dynamically -
i'm trying change multiple google maps marker icon based on urls webserver. since worked web applications new me.
i have read in other topics have create new thread, if want multiple photos doesn't become problem? have suggestion problem?
here code:
import android.location.criteria; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.os.bundle; import android.util.log; import android.view.menu; import android.view.menuitem; import android.support.v7.app.actionbaractivity; import android.view.view; import com.google.android.gms.maps.cameraupdatefactory; import com.google.android.gms.maps.googlemap; 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 org.json.jsonarray; import org.json.jsonexception; public class mainmap extends actionbaractivity implements view.onclicklistener { private googlemap mmap; // might null if google play services apk not available. private locationmanager location; private string provider; private double lat; private double lng; private double pic_lat; private double pic_lng; private string image; public static string log_tag = "cn-quotes"; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_mainmap); location = (locationmanager) getsystemservice(location_service); criteria c = new criteria(); provider = location.getbestprovider(c, false); setupmapifneeded(); view newphoto = findviewbyid(r.id.button_local_position); newphoto.setonclicklistener(this); view popphoto =findviewbyid(r.id.button_popphoto); popphoto.setonclicklistener(this); } @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) { // startactivity(new intent(this, settingsactivity.class)); return true; } return super.onoptionsitemselected(item); } @override protected void onresume() { super.onresume(); location.requestlocationupdates(provider, 300000, 1000, onlocationchange); setupmapifneeded(); } locationlistener onlocationchange=new locationlistener() { public void onlocationchanged(location location) { lng = location.getlongitude(); lat = location.getlatitude(); } public void onproviderdisabled(string provider) { // required interface, not used } public void onproviderenabled(string provider) { // required interface, not used } public void onstatuschanged(string provider, int status, bundle extras) { // required interface, not used } }; private void setupmapifneeded() { // null check confirm have not instantiated map. if (mmap == null) { // try obtain map supportmapfragment. mmap = ((supportmapfragment) getsupportfragmentmanager().findfragmentbyid(r.id.map)) .getmap(); // check if successful in obtaining map. if (mmap != null) { setupmap(); } } } private void setupmap() { mmap.setmaptype(mmap.map_type_hybrid); mmap.setmylocationenabled(true); if (lat != 0) { latlng latlng = new latlng(lat, lng); mmap.movecamera(cameraupdatefactory.newlatlng(latlng)); mmap.animatecamera(cameraupdatefactory.zoomto(10)); log.d("debug", "succes"); } else { log.d("debug", "fail"); } } private void downloadjson(string downloadurl) { new jsondownloader(this, downloadurl).execute(); } public void updatephotos(jsonarray result) { log.d("debug arraylength", "" + result.length()); (int = 0; < result.length(); i++) { try { pic_lat = result.getjsonobject(i).getdouble("latitudes"); pic_lng = result.getjsonobject(i).getdouble("longtitudes"); image = result.getjsonobject(i).getstring("images"); mmap.addmarker(new markeroptions().position(new latlng(lat, lng))); } catch (jsonexception e) { log.e(mainmap.log_tag, "jsonexception", e); } } } @override public void onclick(view v) { string downloadurl = ""; switch (v.getid()) { case r.id.button_popphoto: downloadurl = "index.php"; break; case r.id.button_local_position: downloadurl = "index.php?yourlat=" + lat + "&yourlng=" + lng; break; } downloadjson(downloadurl); } }
and jsondownloader:
import android.os.asynctask; import android.util.log; import org.json.jsonarray; import org.json.jsonexception; import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import java.net.httpurlconnection; import java.net.url; public class jsondownloader extends asynctask<void, void, jsonarray> { private mainmap mm; private string downloadurl = "http://student.cmi.hro.nl/0876538/jaar1/kwartaal3/imp03/huiswerk/week04/opdracht/libs/php/"; public jsondownloader(mainmap mm, string url) { this.mm = mm; this.downloadurl = downloadurl + url; } public jsonarray getphotos() { jsonarray result = new jsonarray(); httpurlconnection con = null; log.d(mainmap.log_tag, "getting photos"); try { log.d(mainmap.log_tag, downloadurl); url url = new url(downloadurl); con = (httpurlconnection) url.openconnection(); con.setreadtimeout(10000); con.setconnecttimeout(15000); con.setrequestmethod("get"); con.setdoinput(true); con.connect(); bufferedreader reader = new bufferedreader( new inputstreamreader(con.getinputstream(), "utf-8")); string payload = reader.readline(); reader.close(); result = new jsonarray(payload); } catch (ioexception e) { log.e(mainmap.log_tag, "ioexception", e); } catch (jsonexception e) { log.e(mainmap.log_tag, "jsonexception", e); } catch (exception e) { log.d(mainmap.log_tag, "something went wrong....", e); } { if (con != null) { con.disconnect(); } } log.d(mainmap.log_tag, "-> returned: " + result); return result; } @override protected jsonarray doinbackground(void... params) { jsonarray photos = getphotos(); return photos; } @override protected void onpostexecute(jsonarray result) { super.onpostexecute(result); mm.updatephotos(result); } }
Comments
Post a Comment