【问题标题】:Add multiple tags to marker向标记添加多个标签
【发布时间】:2017-03-19 21:16:11
【问题描述】:

像在回答中一样创建了 i 模型。 还在标记中添加了标签:

 MarkerTag tag = new MarkerTag();
    Marker marker = map.addMarker(new MarkerOptions()
            .position(new LatLng(47.045029, 28.861427))
            .title("Marker")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
            .snippet("Population: 4,137,400"));
    tag.setEmail("first@gmail.com");
    tag.setPhoneNumber("+37369490007");
    marker.setTag(tag);
    Marker marker2 = map.addMarker(new MarkerOptions()
            .position(new LatLng(47.000327, 28.867950))
            .title("Marker")
            .snippet("Population: 4,137,400 fdfsfsfsdfsfdsfsfssfsfsfsfsfs"));
    tag.setEmail("second@gmail.com");
    tag.setPhoneNumber("+37368750588");
    marker2.setTag(tag);
    Marker marker3 = map.addMarker(new MarkerOptions()
            .position(new LatLng(47.024204, 28.889236))
            .title("Marker")
            .snippet("Population: 4,137,400 /n dasdasdas d"));
    tag.setEmail("three@gmail.com");
    tag.setPhoneNumber("+37369339092");
    marker3.setTag(tag);

并添加了我的方法:

private void makeCall(Marker marker) {
    MarkerTag tag = ((MarkerTag)marker.getTag());
    if (tag != null) {
        Intent call = new Intent(Intent.ACTION_DIAL);
        call.setData(Uri.parse("tel:" + String.valueOf(tag.getPhoneNumber())));
        startActivity(call);
    }
}
private void sendEmail(Marker marker) {
    MarkerTag tag = ((MarkerTag)marker.getTag());
    if (tag != null) {
        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
        intent.putExtra(Intent.EXTRA_TEXT, "text");
        intent.setData(Uri.parse("email:" + String.valueOf(tag.getEmail())));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        checkAndStart(this, intent, R.string.action_settings);
    }
}

但是现在当我按下标记时,我只得到一个数字,这个

37369339092 当我尝试发送电子邮件时,我发现了错误: 233 26548-26548/com.vm.sai E/AndroidRuntime:致命异常:主要 进程:com.vm.sai,PID:26548 java.lang.NullPointerException:尝试调用虚拟方法 'java.lang.Object com.google.android.gms.maps.model.Marker.getTag()' 在空对象引用上 在 com.vm.sai.activities.MapsActivity.sendEmail(MapsActivity.java:168) 在 com.vm.sai.activities.MapsActivity.-wrap1(MapsActivity.java) 在 com.vm.sai.activities.MapsActivity$2.onClickConfirmed(MapsActivity.java:92) 在 com.vm.sai.utils.OnInfoWindowElemTouchListener$1.run(OnInfoWindowElemTouchListener.java:84) 在 android.os.Handler.handleCallback(Handler.java:815) 在 android.os.Handler.dispatchMessage(Handler.java:104) 在 android.os.Looper.loop(Looper.java:194) 在 android.app.ActivityThread.main(ActivityThread.java:5637) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

【问题讨论】:

    标签: java android google-maps google-maps-markers


    【解决方案1】:

    .setTag() 接受 object。因此,为了在其中添加更多信息,您只需创建自己的 TagObject,我们称之为 MarkerTag;

    public class MarkerTag {
    
    
        private String email;
        private String phoneNumber;
    
        public MarkerTag() {
    
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getPhoneNumber() {
            return phoneNumber;
        }
    
        public void setPhoneNumber(String phoneNumber) {
            this.phoneNumber = phoneNumber;
        }
    }
    

    然后你只需将它作为标签添加到你的标记中:

    MarkerTag yourMarkerTag = new MarkerTag();
    yourMarkerTag.setEmail("someemail@gmail.com");
    yourMarkerTag.setPhoneNumber("+15552345353");
    marker.setTag(yourMarkerTag);
    

    现在要找回它,你只需要确保你做对了

        if(null != marker.getTag()){
        if(marker.getTag() instanceof MarkerTag){
            MarkerTag yourMarkerTag = ((MarkerTag)marker.getTag());
            Toast.makeText(getActivity, yourMarkerTag.getEmail() , Toast.LENGTH_SHORT).show();
            Toast.makeText(getActivity, yourMarkerTag.getPhoneNumber() , Toast.LENGTH_SHORT).show();
        }
    }
    

    【讨论】:

    • 谢谢,太好了。但我的意思是我需要在我的标记信息中添加 2 个字段,例如 marker.setTag("+37369490007"); marker.setTag("+someemail@gmail.com");
    • @Inkognito ...请检查编辑。此外,不,您不能按照您尝试的方式放置太多不同的标签。如果您需要除了位置数据之外的大量额外关联数据,那么您必须创建一个对象并将这些数据放入其中并将其作为标签传递给标记。
    • @Inkognito ...另外,请将其标记为答案,以便未来的开发人员从中受益
    • 更新了答案,试试你的例子
    • @Inkognito 你显然需要检查标记是否真的有标签......我会更新我的答案,所以你会发现它是错误的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多