代号一 GPS 追踪器

Codename one GPS tracker

我想用 GPS 信号跟踪设备。同时显示纬度、经度、高度和速度。

我使用这段代码,但屏幕上没有结果:

@Override
protected void onGpsTracker_ButtonAction(Component c, ActionEvent event) {
    try {
        int i = 0;
        Location loc = mylocLocationManager.getCurrentLocation();
        if(loc.getStatus()==LocationManager.AVAILABLE) {
        } else {
            Dialog.show("Error!", "Falla de señal", "OK", null);
        }
        mylocLocationManager.setLocationListener(new LocationListener() {
            public void locationUpdated(Location location) {
                gpsLocation= location;
                Component c = null;
                Label labelalt = (Label)findByName("altitudT", c);
                Label labellat = (Label)findByName("latitudT", c);
                Label labellng = (Label)findByName("longitudT", c);
                Label labeldist = (Label)findByName("distanciaT", c);
                Label labelspeed = (Label)findByName("speedT", c);
                altmax= location.getAltitude();
                double lat = location.getLatitude();
                double lng = location.getLongitude();
                float speed =  location.getVelocity();

                double alt = location.getAltitude();
                velprompos = velprompos + 1;
                totspeed = (int) (totspeed + speed);
                velopro = totspeed / velprompos;
                totalt = altmax - alt;

                velmax=speed;
                Coord lastLocation = new Coord(lat, lng);
                mapComponent.zoomTo(lastLocation, 15);

                prevdistance = totdistance;
                prevLon = currentLon;
                prevLat = currentLat;
                String Salt = String.valueOf(alt);
                labelalt.setText(Salt);
                String Slat = String.valueOf(lat);
                labellat.setText(Slat);
                String Slng = String.valueOf(lng);
                labellng.setText(Slng);
                String Sspeed = String.valueOf(speed);
                labelspeed.setText(Sspeed);

                //aca hay q pner dibujo lineas  
            }

            public void providerStateChanged(int newState) {
                //positionMethod();
            }
        });
    } catch (Exception ex) {
        ex.printStackTrace();
        gpsLocation = null;
    }
}     

想法是在设备移动时获取位置,并将此结果显示在一些标签上。有帮助吗?

您错误地实施了几件事。

  1. @override 添加到重写方法,例如 locationUpdatedproviderStateChanged .

  2. 不要重新声明 Component c 并将其设置为 null

  3. 通过使用 find 方法直接调用它们并传递 c 作为参数来获取标签

  4. revalidaterepaint 每次更新后的表单。

  5. 作为一般建议,保持变量声明的一致性,将 Number of Mangoes 声明为 numOfMangoes 并且 not numberofmangoes 也不 numofmangoes 也不 Numberofmangoes.

    @Override
    protected void onGpsTracker_ButtonAction(Component c, ActionEvent event) {
        try {
            int i = 0;
            Location loc = mylocLocationManager.getCurrentLocation();
            if (loc.getStatus() == LocationManager.AVAILABLE) {
                System.out.println("Location available");
            } else {
                Dialog.show("Error!", "Falla de señal", "OK", null);
            }
            final LocationManager mylocLocationManager = LocationManager.getLocationManager();
            mylocLocationManager.setLocationListener(new LocationListener() {
                @Override
                public void locationUpdated(Location location) {
                    gpsLocation = location;
                    Label labelspeed = ;
                    altmax = location.getAltitude();
                    double lat = location.getLatitude();
                    double lng = location.getLongitude();
                    float speed = location.getVelocity();
    
                    double alt = location.getAltitude();
                    velprompos = velprompos + 1;
                    totspeed = (int) (totspeed + speed);
                    velopro = totspeed / velprompos;
                    totalt = altmax - alt;
    
                    velmax = speed;
                    Coord lastLocation = new Coord(lat, lng);
                    mapComponent.zoomTo(lastLocation, 15);
    
                    prevdistance = totdistance;
                    prevLon = currentLon;
                    prevLat = currentLat;
                    String Salt = String.valueOf(alt);
                    findAltitudT(c).setText(Salt);
                    String Slat = String.valueOf(lat);
                    findLatitudT(c).setText(Slat);
                    String Slng = String.valueOf(lng);
                    findLongitudT(c).setText(Slng);
                    String Sspeed = String.valueOf(speed);
                    findSpeedT(c).setText(Sspeed);
    
                    c.getComponentForm().revalidate();
                    //aca hay q pner dibujo lineas  
                }
    
                @Override
                public void providerStateChanged(int newState) {
                    //positionMethod();
                }
            });
    
        } catch (Exception ex) {
            ex.printStackTrace();
            gpsLocation = null;
        }
    }