【问题标题】:Non-static variable cannot be referenced from a static context?不能从静态上下文中引用非静态变量?
【发布时间】:2017-11-14 09:25:07
【问题描述】:

我是Android Coding的n00b,今天我想尝试使用定位服务。

我设置了一个简单的类和一个简单的main,只是为了有经度和纬度。

但是当我尝试调用构造来检索经纬度时,Android Studio 会弹出错误:

“错误:(33, 16) 错误:不能从静态上下文引用非静态变量纬度”

这是我的位置类

public class AppLocationManager implements LocationListener {

    private LocationManager locationManager;
    private String latitude;
    private String longitude;
    private Criteria criteria;
    private String provider;

    public AppLocationManager(Context context) {
        locationManager = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        provider = locationManager.getBestProvider(criteria, true);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1,0,this);
        setMostRecentLocation(locationManager.getLastKnownLocation(provider));
    }

    private void setMostRecentLocation(Location lastKnownLocation) {

    }

    public String getLatitude() {
        return latitude;
    }

    public String getLongitude() {
        return longitude;
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * android.location.LocationListener#onLocationChanged(android.location.
     * Location)
     */
    @Override
    public void onLocationChanged(Location location) {
        double lon = (double) (location.getLongitude());/// * 1E6);
        double lat = (double) (location.getLatitude());// * 1E6);

//      int lontitue = (int) lon;
//      int latitute = (int) lat;
        latitude = lat + "";
        longitude = lon + "";

    }

    /*
     * (non-Javadoc)
     *
     * @see
     * android.location.LocationListener#onProviderDisabled(java.lang.String)
     */
    @Override
    public void onProviderDisabled(String arg0) {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     *
     * @see
     * android.location.LocationListener#onProviderEnabled(java.lang.String)
     */
    @Override
    public void onProviderEnabled(String arg0) {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     *
     * @see android.location.LocationListener#onStatusChanged(java.lang.String,
     * int, android.os.Bundle)
     */
    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
        // TODO Auto-generated method stub

    }

}

【问题讨论】:

    标签: android location non-static


    【解决方案1】:

    如下声明你的变量是静态的:

     private static String latitude;
     private static  String longitude;
    

    【讨论】:

      【解决方案2】:

      要访问非静态属性和方法,您将使用该类的 Object。要了解请阅读this so thread

       AppLocationManager appLocationManager=new AppLocationManager(context);
      String latitude=appLocationManager.getLatitude();
      String longitude=appLocationManager.getLongitude();
      

      【讨论】:

        猜你喜欢
        • 2019-03-17
        • 2011-11-30
        相关资源
        最近更新 更多