Android 如何在SetOnInfo窗口ClickListener中获取Google Map中单击的标记id

Android 如何在SetOnInfo窗口ClickListener中获取Google Map中单击的标记id,android,google-maps,google-maps-api-3,Android,Google Maps,Google Maps Api 3,在这里,我试图做的是在doInBackground中设置Id,并在setOnInfo窗口ClickListener中调用它。但问题是它获取列表中第一个元素的Id。我想要的是得到被点击的标记的Id。 我正在使用一个变量私有静态字符串id存储idproduct.id=productJSON.getString(“id”)像这样id=product.id然后分配它 googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener(

在这里,我试图做的是在doInBackground中设置Id,并在
setOnInfo窗口ClickListener
中调用它。但问题是它获取列表中第一个元素的Id。我想要的是得到被点击的标记的Id。 我正在使用一个变量
私有静态字符串id
存储id
product.id=productJSON.getString(“id”)像这样
id=product.id然后分配它

googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

        @Override
        public void onInfoWindowClick(Marker arg0) {

            intent.putExtra("PRODUCT_ID",id);
            System.out.println(id);
            startActivity(intent);
        }
如何从ondoInBackground获取id并在
intent.putExtra()
中使用

公共类Frnt\u映射活动扩展活动{
JSONArray jsonarray3;
//谷歌地图
私有静态谷歌地图;
私有静态字符串id;
私人意图;
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);
车床坐标=新车床坐标(50.85514,0.58382);
CameraUpdate yourLocation=CameraUpdateFactory.newLatLngZoom(坐标,18);
googlemap.animateCamera(你的位置);
新的Frnt_mIcons_活动().execute();
新建LocationList().execute();
新建LookingForList().execute();
CreateProductListTask responseDownloadTask=新建CreateProductListTask(“https://www.towncitycards.com/webservice_action.php?action=all_products");
responseDownloadTask.execute();
intent=新的intent(Frnt\u mapActivity.this,MainActivity.class);
setOnInfoWindowClickListener(新的OnInfoWindowClickListener(){
@凌驾
公用无效信息窗口单击(标记arg0){
意图。putExtra(“产品标识”,标识);
系统输出打印项次(id);
星触觉(意向);
}
});
受保护的类CreateProductListTask扩展了AsyncTask{
私有字符串serverUrl;
公共CreateProductListTask(字符串url){
超级();
this.serverUrl=url;
}
@凌驾
受保护列表doInBackground(无效…参数)
{
HostnameVerifier HostnameVerifier=org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient=新的DefaultHttpClient();
SchemeRegistry registry=新SchemeRegistry();
SSLSocketFactory-socketFactory=SSLSocketFactory.getSocketFactory();
setHostnameVerifier((X509HostnameVerifier)hostnameVerifier);
注册表(新方案(“http”,socketFactory,443));
SingleClientConnManager mgr=新的SingleClientConnManager(client.getParams(),注册表);
DefaultHttpClient httpClient=新的DefaultHttpClient(mgr,client.getParams());
//集合验证器
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
HttpPost HttpPost=新的HttpPost(“http://towncitycards.com/webservice_action.php?action=all_products");
URLConnection urlConn=null;
BufferedReader BufferedReader=null;
尝试
{
URL URL=新URL(this.serverUrl);
urlConn=url.openConnection();
bufferedReader=新的bufferedReader(新的InputStreamReader(urlConn.getInputStream());
StringBuffer StringBuffer=新的StringBuffer();
弦线;
而((line=bufferedReader.readLine())!=null){
stringBuffer.append(行);
}
JSONObject响应=新的JSONObject(stringBuffer.toString());
列表产品=新的ArrayList();
HashMap iconsMap=新HashMap();
试一试{
JSONArray productsJSON=response.getJSONArray(“所有产品”);

对于(int ixProduct=0;ixProduct将
product.id
添加为
标记的

Marker marker = googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(product.lat, product.lon))
        .title(product.name)
        .icon(BitmapDescriptorFactory.fromBitmap(product.icon)));
marker.setTag(product.id);
private Map<Marker, String> markerIds = new HashMap<>();
然后在您的
OnInfo窗口上单击Listener
获取
标签

googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
    @Override
    public void onInfoWindowClick(Marker marker) {
        intent.putExtra("PRODUCT_ID",(String) marker.getTag());
        startActivity(intent);
    }
}
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
    @Override
    public void onInfoWindowClick(Marker marker) {
        intent.putExtra("PRODUCT_ID",markerIds.get(marker));
        startActivity(intent);
    }
}

另一种选择是保留一个
映射
,以存储与每个
标记相关联的
id

Marker marker = googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(product.lat, product.lon))
        .title(product.name)
        .icon(BitmapDescriptorFactory.fromBitmap(product.icon)));
marker.setTag(product.id);
private Map<Marker, String> markerIds = new HashMap<>();
然后在您的
OnInfo窗口上单击Listener
获取
标签

googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
    @Override
    public void onInfoWindowClick(Marker marker) {
        intent.putExtra("PRODUCT_ID",(String) marker.getTag());
        startActivity(intent);
    }
}
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
    @Override
    public void onInfoWindowClick(Marker marker) {
        intent.putExtra("PRODUCT_ID",markerIds.get(marker));
        startActivity(intent);
    }
}

marker.setTag(product.id)
错误消息变量标记可能未初始化。我使用的是旧的google地图服务,其中不支持
。setTag
。我可以在其中使用什么?我可以做什么来使用相同的东西。如果不更新
播放服务地图
版本,你就不能使用
setTag
。看看我在中提出的替代方案我的回答非常感谢你,一个问题解决了。你也能解决我的其他问题吗?这对我来说太好了?