1

OverlayItem を拡張してより多くのフィールドを含めるクラスがあります。PointOfInterest クラスを使用して、プログラム内のすべての OverlayItem オカレンスを変更しました。

OverlayItem で動作する同じプログラムを実行しようとすると、ItemizedOverlay クラスでpopulate()を呼び出した後、nullpointerException でクラッシュします。ログは正しい値を出力します。これがクラッシュする方法です。

protected void addOverlay(PointOfInterest pointOfInterest) {

    mapOverlays.add(pointOfInterest);
    setLastFocusedIndex(-1);
    Log.d("Add Overlay", pointOfInterest.getDescription());
    populate(); <-- Crashes here
}

そしてエラー

12-06 17:29:03.610: E/AndroidRuntime(1822): java.lang.NullPointerException
12-06 17:29:03.610: E/AndroidRuntime(1822):     at com.google.android.maps.ItemizedOverlay.populate(ItemizedOverlay.java:312)
12-06 17:29:03.610: E/AndroidRuntime(1822):     at com.example.mapproject.OurItemizedOverlay.addOverlay(OurItemizedOverlay.java:108)
12-06 17:29:03.610: E/AndroidRuntime(1822):     at com.example.mapproject.MainActivity.addPointToMap(MainActivity.java:211)

何か案は?ありがとう !

4

1 に答える 1

0

それを理解して、 addOverlay メソッドに渡される PointOfInterest が JSON 文字列から作成されたことに言及しなかったため、含まれるコンストラクター

super(point, title, snippet)

呼ばれたことはありませんでした。

これを、ソートしたと思われる addOverlay メソッドに追加しました。

protected void addOverlay(PointOfInterest pointOfInterest) {

    PointOfInterest pointOfInterest2 = new PointOfInterest(pointOfInterest.title,pointOfInterest.title,pointOfInterest.type,pointOfInterest.point,pointOfInterest.privateField);
    mapOverlays.add(pointOfInterest2);
    setLastFocusedIndex(-1);
    Log.d("Add Overlay", pointOfInterest2.getSnippet());
    populate();

}
于 2012-12-06T20:13:27.837 に答える