【问题标题】:Java/Android: convert String to bytes[] then to float and backJava/Android:将 String 转换为 bytes[] 然后浮动并返回
【发布时间】:2017-03-20 14:52:52
【问题描述】:

我需要存储我在地图上绘制的多边形的名称。我所有的多边形都有一个名称,但 GoogleMap API 不允许您将自己的 id 放在多边形上(有人请解释为什么?!这没有任何意义!!)通过 id 识别多边形的唯一方法是因此要在其 z-index 中保留一种 ID。 z-index 是一个浮点数,我的 id 是字符串。因此,我试图将我的字符串转换为 bytes[] 然后浮动,并在需要识别我的多边形时对其进行解码。这是我尝试这样做的方法:

 private float convertStringToFloat(ZoneData zone) {
        byte[] stringinBytes = zone.getName().getBytes();
        return ByteBuffer.wrap(stringinBytes).getFloat();
    }

    private String convertFloatToString(float nameFloat) {
        Float f = new Float(nameFloat);
        byte[] nameBytesArray =  new byte [] { (byte) (f.byteValue() >>> 56),
                (byte) (f.byteValue() >>> 48),
                (byte) (f.byteValue() >>> 40),
                (byte) (f.byteValue() >>> 32),
                (byte) (f.byteValue() >>> 24),
                (byte) (f.byteValue() >>> 16),
                (byte) (f.byteValue() >>> 8),
                (byte) f.byteValue() };
        return new String(nameBytesArray);
    }

不幸的是,它不起作用,我不确定为什么,当我打印输出字符串时,我得到一个:

[����������������, ����������������]

再一次,我只是不明白为什么没有办法识别多边形是 API,如果 Google 的任何人读到这个,我们会在什么世界中绘制多边形但无法识别它们?!

更新

这是我的 ZoneData 代码的工作原理:

public class ZoneData {
    private LatLng P1;
    private LatLng P2;
    private LatLng P3;
    private LatLng P4;
    private String name;

    public ZoneData(JSONObject zone){
        patients = new ArrayList<PatientData>();
        try {
            this.name = zone.getString("name");
            this.P1 = new LatLng(zone.getDouble("P1Lat"), zone.getDouble("P1Lon"));
            this.P2 = new LatLng(zone.getDouble("P2Lat"), zone.getDouble("P2Lon"));
            this.P3 = new LatLng(zone.getDouble("P3Lat"), zone.getDouble("P3Lon"));
            this.P4 = new LatLng(zone.getDouble("P4Lat"), zone.getDouble("P4Lon"));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    public LatLng getP1() {
        return P1;
    }

    public void setP1(LatLng p1) {
        P1 = p1;
    }

    public LatLng getP2() {
        return P2;
    }

    public void setP2(LatLng p2) {
        P2 = p2;
    }

    public LatLng getP3() {
        return P3;
    }

    public void setP3(LatLng p3) {
        P3 = p3;
    }

    public LatLng getP4() {
        return P4;
    }

    public void setP4(LatLng p4) {
        P4 = p4;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

【问题讨论】:

  • 首先,您似乎试图将float 视为具有64 位信息。接下来,您调用f.byteValue() 并尝试将那个 视为它具有64 位信息。从根本上说,我非常怀疑这种方法是否会奏效。
  • 我认为 Google 的任何人都不会阅读这篇文章 ^.^

标签: java android google-maps polygon


【解决方案1】:

使用和 hashmap 来存储 ZoneData id 和折线 id 之间的关联:

HashMap<String,String> myIds = new HashMap<>();

Polyline polyline = map.addPolyline(...);
myIds.put(polyline.getId(),zone.getName();

还有颜色:

折线 = map.addPolyline(new PolylineOptions() .add(新纬度(51.5,-0.1),新纬度(40.7,-74.0)) .width(5) .color(Color.RED));

【讨论】:

  • 这将如何工作? ZoneData 是一个对象,其中包含许多其他值,我用 zoneData 中的代码更新了我的问题
  • 当我尝试从折线扩展时出现此错误:无法从最终的 'com.google.android.gms.maps.model.Polyline' 继承
  • 是的,使用折线的问题是我不能用颜色填充它们,我真的需要这样做。但是很好的答案谢谢!
  • 我无法理解颜色的重点......顺便说一句,我也用颜色更新了答案。
  • 这会为线条添加颜色,而不是填充“多边形”或折线内部,这是我需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 2017-01-02
  • 2011-02-15
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 2013-07-01
相关资源
最近更新 更多