当前位置: 首页 > 知识库问答 >
问题:

Android中的位置侦听器给出java.lang.IllegalArgumentException:无效侦听器:null

丁承德
2023-03-14

嘿,当我运行应用程序时,它会给出一个错误java.lang.IllegalArgumentException:Invalid listener:null,这说明侦听器是空的。我是初学者,所以请大家帮忙解决这个问题。在这一行中出现错误:LocationManager.RequestLocationUpdates(provider,2000,0,locationListener);//这里是我的示例代码:

    public class MainActivity extends MapActivity  {
    GoogleMap map;
    MapController mapController;
    LocationListener locationListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MapView myMapView = (MapView)findViewById(R.id.mapview);
        mapController = myMapView.getController();
        myMapView.setSatellite(true);
        myMapView.setStreetView(true);
        myMapView.displayZoomControls(false);
        mapController.setZoom(16);

        LocationManager locationManager;
        String context = Context.LOCATION_SERVICE;
        locationManager = (LocationManager)getSystemService(context);

        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);

        String provider = locationManager.getBestProvider(criteria, true);
         Location location = locationManager.getLastKnownLocation(provider);

         updateWithNewLocation(location);
       locationManager.requestLocationUpdates(provider, 2000, 0, locationListener);

    }
    private void updateWithNewLocation(Location location) {

        // TODO Auto-generated method stub
        String latLongString;
        TextView myLocationText;
        myLocationText = (TextView)findViewById(R.id.maptextview);

        String addressString = "No Address Found";

        if(location != null)
        {
            Double geoLat = location.getLatitude()*1E6;
            Double geoLng = location.getLongitude()*1E6;

            GeoPoint point = new GeoPoint(geoLat.intValue(),geoLng.intValue());


            mapController.animateTo(point);
            Double lat = location.getLatitude();
            Double lng = location.getLongitude();

            latLongString ="Lat : "+lat+ "\n Long : "+lng;

            Double latitude = location.getLatitude();
            Double longitude = location.getLongitude();

            Geocoder gc = new Geocoder(this, Locale.getDefault());

            try
            {
                List<Address> addresses = gc.getFromLocation(latitude, longitude, 1);
                StringBuilder sb = new StringBuilder();
                if(addresses.size() > 0)
                {
                    Address address = addresses.get(0);
                    for(int i=0; i < address.getMaxAddressLineIndex(); i++)
                        sb.append(address.getAddressLine(i)).append("\n");
                    sb.append(address.getLocality()).append("\n");
                    sb.append(address.getPostalCode()).append("\n");
                    sb.append(address.getCountryName()).append("\n");

                }
                addressString = sb.toString();
            }
            catch(IOException e){ }
        }
        else {
            latLongString = "No Location Found";
        }
        myLocationText.setText("your current position : "+latLongString+"\n"+addressString);        
    }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
}

共有1个答案

阎卓
2023-03-14

还将LocationListener初始化为:

locationListener = new LocationListener() {
    // @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO locationListenerGPS onStatusChanged

    }

    // @Override
    public void onLocationChanged(Location location) {


    }
};
 类似资料:
  • 问题内容: 哪种方法更好,直接像这样执行 或通常在类内部声明? 问题答案: 在第二段代码中,必须在调用接口的方法之前先调用属性。 在第一段代码中,您可以直接访问接口方法。 因此,如果您知道每个方法调用都会花费cpu时间,则直接在类中实现它而不是将其作为属性将是有益的。 在这种情况下,您有1个引用,可以使用该引用访问LocationListener的方法 在这种情况下,您有2个引用,一个是 Back

  • 要运行Kafka,需要在文件。有两种设置我不理解。 有人可以解释侦听器和广告侦听器属性之间的区别吗? 留档说: 侦听器:套接字服务器侦听的地址。 和 advertised.listeners:主机名和端口代理将向生产者和消费者做广告。 我什么时候必须使用哪个设置?

  • 我有一个关于正确配置kafka侦听器属性的问题-侦听器和advertised.listers。 在我的配置中,我设置了以下道具: 客户端使用 进行连接。我是否需要在侦听器和广告侦听器中具有相同的值。这里 是指向运行 kafka 代理的主机的 dns 记录。 在什么情况下,我希望它们保持不变和不同? 谢谢!

  • 问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。

  • 我正在使用Realex Payments的HPP API开发一个卡支付页面,其中包含一个iFrame,用于托管Realex页面。在Realex请求表单上,我将字段HPP_POST_维度和HPP_POST_响应设置为我的URL,如下所示: 付款页: www.example.com/account/payment.html 隐藏字段值用于在HPP页面大小更改和事务完成时,使用事件侦听器将数据从Real

  • 虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。例如: <div id="watch-example"> <p> Ask a yes/no question: <input v-model="question">