簡體   English   中英

NullPointer異常,向MapView添加新的Overlay

[英]NullPointer Exception with adding new Overlay to MapView

ItemizedOverlay有以下代碼:

private class AppointmentsOverlay extends ItemizedOverlay {
    private List<OverlayItem> locations;

    public AppointmentsOverlay(Drawable defaultMarker, List<Address> addresses) {
        super(defaultMarker);
        locations=new ArrayList<OverlayItem>();
        convertAddressesToOverlayItems(addresses);
    }

    private void convertAddressesToOverlayItems(List<Address> addresses) {
        for (Address address:addresses) {
            GeoPoint gp=new GeoPoint((int)(address.getLatitude()*1000000), 
                (int)(address.getLongitude()*1000000));
            locations.add(new OverlayItem(gp, "1", "1"));
        }
    }

    @Override
    protected OverlayItem createItem(int i) {
        return locations.get(i);
    }

    @Override
    public int size() {
        return locations.size();
    }   
}

和以下代碼將此疊加層添加到MapView:

private void initializeMapWithAppointments(List<Address> addresses) {
    Drawable marker=getResources().getDrawable(R.drawable.marker);
    mMapViewAppointments.getOverlays().add(new AppointmentsOverlay(marker, addresses));
    //mMapViewAppointments.setClickable(false);
}

如果我通過MapView單擊,則會收到以下異常消息:

04-09 19:57:36.948: E/MapActivity(7053): Couldn't get connection factory client
04-09 19:57:41.263: E/AndroidRuntime(7053): FATAL EXCEPTION: main
04-09 19:57:41.263: E/AndroidRuntime(7053): java.lang.NullPointerException
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.google.android.maps.ItemizedOverlay.getItemsAtLocation(ItemizedOverlay.java:617)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.google.android.maps.ItemizedOverlay.getItemAtLocation(ItemizedOverlay.java:586)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.google.android.maps.ItemizedOverlay.handleMotionEvent(ItemizedOverlay.java:498)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.google.android.maps.ItemizedOverlay.onTouchEvent(ItemizedOverlay.java:572)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.google.android.maps.OverlayBundle.onTouchEvent(OverlayBundle.java:63)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.google.android.maps.MapView.onTouchEvent(MapView.java:679)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.View.dispatchTouchEvent(View.java:5579)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1720)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1692)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1692)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1692)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1692)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1983)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1442)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.app.Activity.dispatchTouchEvent(Activity.java:2421)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1931)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.View.dispatchPointerEvent(View.java:5759)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2970)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2529)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:869)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2538)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.os.Looper.loop(Looper.java:154)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at android.app.ActivityThread.main(ActivityThread.java:4945)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at java.lang.reflect.Method.invokeNative(Native Method)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at java.lang.reflect.Method.invoke(Method.java:511)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-09 19:57:41.263: E/AndroidRuntime(7053):     at dalvik.system.NativeStart.main(Native Method)

我不明白這是什么意思,因為我也看不到新的自定義ItemizedOverlay。 我添加了api鍵,並且看到了空的MapView。 請告訴我,我該如何解決? 謝謝。

populate()任何數據之前,需要在ItemizedOverlay中調用populate()

  public AppointmentsOverlay(Drawable defaultMarker, List<Address> addresses) {
        super(defaultMarker);
        populate(); // Add this
        locations=new ArrayList<OverlayItem>();
        convertAddressesToOverlayItems(addresses);
    }

如規定在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM