Android 如何从webservice动态获取Google地图(地图图标、标题、纬度、经度)
这是我的 我想从给定的web服务中动态获取地图图标、经度和纬度。我被困在这一点上。我该怎么做?请帮帮我。 在旧代码中,所做的是根据id从web服务中获取经度、纬度和帖子标题,然后静态分配图像。Android 如何从webservice动态获取Google地图(地图图标、标题、纬度、经度),android,web-services,google-maps,Android,Web Services,Google Maps,这是我的 我想从给定的web服务中动态获取地图图标、经度和纬度。我被困在这一点上。我该怎么做?请帮帮我。 在旧代码中,所做的是根据id从web服务中获取经度、纬度和帖子标题,然后静态分配图像。 Frnt\u mapActivity.java public class Frnt_mapActivity extends Activity { public String Shop_title; public String Shop_address; public String Shop_icons
Frnt\u mapActivity.java
public class Frnt_mapActivity extends Activity {
public String Shop_title;
public String Shop_address;
public String Shop_icons;
ProgressDialog mDialog;
JSONObject jsonobject3;
JSONArray jsonarray3;
// Google Map
private static GoogleMap googlemap;
public static ArrayList<SearchBeams> searchdata_list;
public static ArrayList<NormalSearchBeams> normlSearchList;
ArrayList<All_products_lat_long> venueList;
private int i;
private Intent intent;
HashMap<Marker, Integer> hashMap=new HashMap<Marker, Integer>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.frnt_map_activity);
googlemap=((MapFragment)getFragmentManager().findFragmentById(R.id.places_map)).getMap();
googlemap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googlemap.setMyLocationEnabled(true);
googlemap.getUiSettings().setZoomControlsEnabled(true);
googlemap.getUiSettings().setMyLocationButtonEnabled(true);
googlemap.getUiSettings().setCompassEnabled(true);
googlemap.getUiSettings().setRotateGesturesEnabled(true);
googlemap.getUiSettings().setZoomGesturesEnabled(true);
googlemap.setMyLocationEnabled(true);
intent=new Intent(Frnt_mapActivity.this,MainActivity.class);
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker arg0) {
i=hashMap.get(arg0);
intent.putExtra("PRODUCT_ID", venueList.get(i).getId());
startActivity(intent);
//overridePendingTransition( R.anim.slide_right, R.anim.slide_left );
}
});
new Frnt_mIcons_Activity().execute();
}
class AddMarkerAsyncTask extends AsyncTask<String,String,String>{
private All_products_lat_long venue;
private int k;
BitmapDescriptor bd=null;
AddMarkerAsyncTask(All_products_lat_long venue,int k){
this.venue=venue;
this.k=k;
}
@Override
protected String doInBackground(String... strings) {
try{
bd=BitmapDescriptorFactory.fromBitmap(Glide.
with(Frnt_mapActivity.this).
load(venue.getMap_icon()).
asBitmap().
into(100, 100). // Width and height
get());
}catch (Exception e){
bd=null;
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try{
if(bd!=null){
Marker marker=googlemap.addMarker(new MarkerOptions()
.position(new LatLng(Double.parseDouble(venue.getLatitude()), Double.parseDouble(venue.getLongitude())))
.title(venue.getPost_title())
.icon(bd));
hashMap.put(marker, k);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
private void addMarkers() {
for(int k=0; k<venueList.size(); k += 1){
//nirmal
try{
Log.e("nirmal",venueList.get(k).getMap_icon());
//new AddMarkerAsyncTask(venueList.get(k),k).execute();
double ln = Double.parseDouble(venueList.get(k).getLongitude());
double la = Double.parseDouble(venueList.get(k).getLatitude());
/*String title=venueList.get(k).getPost_title()==null?"":venueList.get(k).getPost_title();
URL url = new URL(venueList.get(k).getMap_icon());
Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
BitmapDescriptor bd=BitmapDescriptorFactory.fromBitmap(image);*/
/*Marker marker=googlemap.addMarker(new MarkerOptions()
.position(new LatLng(la, ln))
.title(title)
.icon(bd));
hashMap.put(marker, k);*/
switch (Integer.parseInt(venueList.get(k).getId()))
{
case 5689 :
Marker marker=googlemap.addMarker(new MarkerOptions()
.position(new LatLng(la, ln))
.title(venueList.get(k).getPost_title())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.fruitandveg)));
hashMap.put(marker, k);
break;
case 5779 :
Marker marker1=googlemap.addMarker(new MarkerOptions()
.position(new LatLng(la, ln))
.title(venueList.get(k).getPost_title())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.coffee)));
hashMap.put(marker1, k);
break;
case 5798 :
Marker marker3 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(la, ln))
.title(venueList.get(k).getPost_title())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.takeaway)));
hashMap.put(marker3, k);
break;
case 5810 :
Marker marker4 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(la, ln))
.title(venueList.get(k).getPost_title())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.restaurant_steakhouse)));
hashMap.put(marker4, k);
break;
case 6005 :
Marker marker5 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(la, ln))
.title(venueList.get(k).getPost_title())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.clambers_playcentre)));
hashMap.put(marker5, k);
break;
case 6011 :
Marker marker6 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(la, ln))
.title(venueList.get(k).getPost_title())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.thetruecrimemuseum)));
hashMap.put(marker6, k);
break;
.........
...........
............
default :
break;
}
}catch (Exception e){
Log.e("addMarkers",k+"");
e.printStackTrace();
}
}
}
/******************FOR MAP******************/
class Frnt_mIcons_Activity extends AsyncTask<String, String, String> {
public ArrayList<All_products_lat_long> maplist;
@Override
protected void onPreExecute() {
mDialog = new ProgressDialog(Frnt_mapActivity.this);
mDialog.setMessage("Loading...");
mDialog.setCancelable(false);
mDialog.show();
super.onPreExecute();
}
// Slow Implementation
private String inputStreamToString(InputStream is) {
String s = "";
String line = "";
// Wrap a BufferedReader around the InputStream
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
// Read response until the end
try {
while ((line = rd.readLine()) != null) {
s += line;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Return full string
return s;
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
maplist = new ArrayList<All_products_lat_long>();
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient client = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("http", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
HttpPost httpPost = new HttpPost("http://towncitycards.com/webservice_action.php?action=all_products");
try{
HttpResponse response = httpClient.execute(httpPost);
String data = inputStreamToString(response.getEntity().getContent());
jsonobject3 = new JSONObject(data);
jsonarray3 = new JSONArray(jsonobject3.getString("all_products"));
venueList =new ArrayList<All_products_lat_long>();
for(int j=0; j<jsonarray3.length();j++){
JSONObject itemobj = jsonarray3.getJSONObject(j);
//SHOW SEARCH RESULT
All_products_lat_long searchItems = new All_products_lat_long();
searchItems.setId(itemobj.getString("ID"));
searchItems.setPost_title(itemobj.getString("post_title"));
searchItems.setMap_icon(itemobj.getString("map_icon"));
searchItems.setLongitude(itemobj.getString("longitude"));
searchItems.setLatitude(itemobj.getString("latitude"));
// System.out.println("######Ashish is object >>"+itemobj);
venueList.add(searchItems);
// System.out.println("SEARCHLISTSS@@@@@@@"+venueList.get(j).getLongitude());
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String result) {
super.onPostExecute(result);
//System.out.println("SEARCHLISTSS@@@@@@@"+venueList);
//System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAA"+venueList);
try{
if(venueList.size()>0)
{
addMarkers();
// Toast.makeText(Frnt_mapActivity.this,"Search for the venue11.",Toast.LENGTH_SHORT).show();
}
else
Toast.makeText(Frnt_mapActivity.this,"Search for the venue.",Toast.LENGTH_SHORT).show();
//LatLng coordinate = new LatLng(22.75852160, 75.8911550);
LatLng coordinate = new LatLng(50.85514, 0.58382);
CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 18);
googlemap.animateCamera(yourLocation);
for (int i = 0; i < jsonarray3.length(); i++) {
jsonobject3 = jsonarray3.getJSONObject(i);
Shop_title = jsonobject3.optString("post_title");
Shop_address = jsonobject3.optString("map_icon");
Shop_icons = jsonobject3.optString("map_icon");
//}
}
}catch(Exception e){
e.printStackTrace();
}
if(mDialog!=null && mDialog.isShowing()){
mDialog.dismiss();
}
}
}
公共类Frnt\u映射活动扩展活动{
公共字符串商店名称;
公共字符串地址;
公共字符串商店图标;
进步对话;
JSONObject JSONObject 3;
JSONArray jsonarray3;
//谷歌地图
私有静态谷歌地图;
公共静态ArrayList searchdata_列表;
公共静态数组列表normlSearchList;
ArrayList venueList;
私人互联网i;
私人意图;
HashMap HashMap=新的HashMap();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.frnt\u map\u活动);
googlemap=((MapFragment)getFragmentManager().findFragmentById(R.id.places_-map)).getMap();
googlemap.setMapType(googlemap.MAP\u TYPE\u NORMAL);
googlemap.setMyLocationEnabled(true);
googlemap.getUiSettings().setZoomControlsEnabled(true);
googlemap.getUiSettings().setMyLocationButtonEnabled(true);
googlemap.getUiSettings().setCompassEnabled(true);
googlemap.getUiSettings().setRotategestureEnabled(true);
googlemap.getUiSettings().SetZoomGetUreSEnabled(true);
googlemap.setMyLocationEnabled(true);
intent=新的intent(Frnt\u mapActivity.this,MainActivity.class);
setOnInfoWindowClickListener(新的OnInfoWindowClickListener(){
@凌驾
公用无效信息窗口单击(标记arg0){
i=hashMap.get(arg0);
intent.putExtra(“PRODUCT_ID”,venueList.get(i.getId());
星触觉(意向);
//覆盖转换(右动画幻灯片,左动画幻灯片);
}
});
新的Frnt_mIcons_活动().execute();
}
类AddMarkerAsyncTask扩展异步任务{
私人所有产品展馆;
私人INTK;
BitmapDescriptor bd=null;
AddMarkerAsyncTask(所有产品、长场地、int k){
这个。地点=地点;
这个。k=k;
}
@凌驾
受保护的字符串背景(字符串…字符串){
试一试{
bd=BitmapDescriptorFactory.fromBitmap(Glide。
使用(Frnt\u mapActivity.this)。
加载(vention.getMap_icon())。
asBitmap()。
进入(100100)。//宽度和高度
get());
}捕获(例外e){
bd=null;
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
试一试{
如果(bd!=null){
Marker Marker=googlemap.addMarker(新MarkerOptions()
.position(新LatLng(Double.parseDouble(venue.getLatitude()),Double.parseDouble(venue.getLongitude()))
.title(地点.getPost_title())
.图标(bd));
hashMap.put(marker,k);
}
}捕获(例外e){
e、 printStackTrace();
}
}
}
私有void addMarkers(){
对于(int k=0;k0)
{
添加标记();
//Toast.makeText(Frnt\u mapActivity.this,“搜索venue11.”,Toast.LENGTH\u SHORT.show();
}
其他的
Toast.makeText(Frnt\u mapActivity.this,“搜索场地”,Toast.LENGTH\u SHORT.show();
//车床坐标=新车床坐标(22.75852160,75.8911550);
车床坐标=新车床坐标(50.85514,0.58382);
CameraUpdate yourLocation=CameraUpdateFactory.newLatLngZoom(坐标,18);
googlemap.animateCamera(你的位置);
for(int i=0;i
}我不太明白你的问题,但是 你可以
Map<String, Marker> markerMap;
选项在哪里
MarkerOptions options = new MarkerOptions();
options.position(YOUR_JSON_OBJECT.Latitude, YOUR_JSON_OBJECT.Longtite));
options.title(YOUR_TITLE);
options.visible(true);
options.icon(YOUR_IMAGE);
希望就是帮助我真的不明白你的问题,但是 你可以
Map<String, Marker> markerMap;
选项在哪里
MarkerOptions options = new MarkerOptions();
options.position(YOUR_JSON_OBJECT.Latitude, YOUR_JSON_OBJECT.Longtite));
options.title(YOUR_TITLE);
options.visible(true);
options.icon(YOUR_IMAGE);
hope is's help在服务器响应JSON中没有标记图标,只有它的引用。所以你应该: 1) 从“web服务”下载JSON响应(例如,与问题答案类似,但最好使用
service
)
2) 对于响应的每个“ID”,从URL获取图标,存储在“映射图标”字段中(例如,与问题答案类似)
3) 创建带有图标的谷歌地图标记。在第2页下载,就像在你的“旧代码”或
更新
您的任务中有几个问题:
1) 您的服务器响应包含错误的“映射图标”URL:http://
协议前缀而不是https://
,因此您应该将http://
替换为https://
2) 一些“地图图标”URL包含UNICODE符号(如保存2.png
中的符号磅“£”),因此您应该将其编码为以下格式:保存%C2%A32.png
而不是保存2.png
3) 一些“地图图标”URL甚至不存在(如
或
)所以你应该忽略它(或者为它设置一些默认图标)
因此,根据这一点,可以使用基于AsyncTask
的类完成上述(更新前)步骤,如下所示:
protected class CreateProductListTask extends AsyncTask<Void, Void, List<Product>> {
private String serverUrl;
public CreateProductListTask(String url) {
super();
this.serverUrl = url;
}
@Override
protected List<Product> doInBackground(Void... params)
{
URLConnection urlConn = null;
BufferedReader bufferedReader = null;
try
{
URL url = new URL(this.serverUrl);
urlConn = url.openConnection();
bufferedReader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
}
JSONObject response = new JSONObject(stringBuffer.toString());
List<Product> products = new ArrayList<>();
HashMap<String, Bitmap> iconsMap = new HashMap<>();
try {
JSONArray productsJSON = response.getJSONArray("all_products");
for (int ixProduct=0; ixProduct<productsJSON.length(); ixProduct++) {
JSONObject productJSON = productsJSON.getJSONObject(ixProduct);
String mapIconStr = productJSON.getString("map_icon");
URI uri = new URI(mapIconStr);
String[] segments = uri.getPath().split("/");
String iconName = segments[segments.length-1];
// percetn-encode URL
String mapIconPath = mapIconStr.substring(0, mapIconStr.indexOf(iconName));
String iconUrlString = mapIconPath + URLEncoder.encode(iconName, "UTF-8");
// replace "http:" with "https:"
iconUrlString = iconUrlString.replace("http:", "https:");
Bitmap bmp;
if (!iconsMap.containsKey(iconUrlString)) {
bmp = getBitmapFromURL(iconUrlString);
// populate map with unique icons
iconsMap.put(iconUrlString, bmp);
} else {
bmp = iconsMap.get(iconUrlString);
}
if (bmp != null) {
try {
Product product = new Product();
product.name = productJSON.getString("post_title");
product.lat = productJSON.getDouble("latitude");
product.lon = productJSON.getDouble("longitude");
product.icon = bmp;
products.add(product);
} catch (Exception ignore) {
}
}
}
} catch (JSONException ex) {
Log.e("App", "Failure", ex);
}
return products;
}
catch(Exception ex)
{
Log.e("App", "yourDataTask", ex);
return null;
}
finally
{
if(bufferedReader != null)
{
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
protected void onPostExecute(List<Product> products)
{
if(products != null) {
for (Product product : products) {
googlemap.addMarker(new MarkerOptions()
.position(new LatLng(product.lat, product.lon))
.title(product.name)
.icon(BitmapDescriptorFactory.fromBitmap(product.icon))
);
}
}
}
}
getBitmapFromURL()
是:
public static Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
bmOptions.inJustDecodeBounds = false;
Bitmap myBitmap = BitmapFactory.decodeStream(input, null, bmOptions);
return myBitmap;
} catch (IOException e) {
return null;
}
}
及
CreateProductListTask responseDownloadTask = new CreateProductListTask("https://www.towncitycards.com/webservice_action.php?action=all_products");
responseDownloadTask.execute();