0

アプリで場所のリストを見つけ、その場所を地図上に表示するために緯度と経度を別のクラスに渡しましたが、リストされた場所をクリックすると「強制終了アプリケーション」が表示されます。

コードは次のとおりです:
onClickで場所をリストする

 ListView lv = getListView();
            // listening to single list item click
    lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem

            String lat = ((TextView) view.findViewById(R.id.lat)).getText().toString();
            String lng = ((TextView) view.findViewById(R.id.lng)).getText().toString();
            // Starting new intent
            Intent in = new Intent(getApplicationContext(), ViewOnMap.class);

            in.putExtra(KEY_LAT, lat);
            in.putExtra(KEY_LONG, lng);
            startActivity(in);

        }
    });

次に、マップ上の場所を表示する別のクラスを作成しました。

public class ViewOnMap extends MapActivity {

static final String KEY_LAT = "lat";
static final String KEY_LONG = "lng";

MapView mview;
MapController mcontrol;
LocationManager locmanager;
Location location;
GeoPoint geopoint;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);

     Intent in = getIntent();

    List<Overlay> mapOverlays = mview.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.marker);
    MapOverlay itemizedoverlay = new MapOverlay(drawable, this);


      String lat = in.getStringExtra(KEY_LAT);
      String lng = in.getStringExtra(KEY_LONG);

      int latitude = Integer.parseInt(lat);
      int longitude = Integer.parseInt(lng);

      mview =(MapView)findViewById(R.id.mapv);
      mview.displayZoomControls(true);
      mview.setBuiltInZoomControls(true);
      mcontrol =mview.getController();
      mcontrol.setZoom(9);
      GeoPoint point = new GeoPoint(latitude,longitude);
      OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");

      itemizedoverlay.addOverlay(overlayitem);
      mapOverlays.add(itemizedoverlay);

}

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

}

何が間違っているのか教えてください。LogCat のエラーは次のとおりです。

04-17 18:07:54.509: E/AndroidRuntime(13783): 致命的な例外: メイン 04-17 18:07:54.509: E/AndroidRuntime(13783): java.lang.RuntimeException: アクティビティ ComponentInfo{com を開始できません。 run.trial/com.run.trial.ViewOnMap}: java.lang.NullPointerException 04-17 18:07:54.509: E/AndroidRuntime(13783): android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768) で 04 -17 18:07:54.509: E/AndroidRuntime(13783): android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784) 04-17 18:07:54.509: E/AndroidRuntime(13783): android.app で.ActivityThread.access$1500(ActivityThread.java:123) 04-17 18:07:54.509: E/AndroidRuntime(13783): android.app.ActivityThread$H.handleMessage(ActivityThread.java:939) 04-17 18: 07:54.509: E/AndroidRuntime(13783): android.os.Handler.dispatchMessage(Handler.java:99) 04-17 18:07:54.509: E/AndroidRuntime(13783): android.os.Looper.loop(Looper.java:130) 04-17 18:07:54.509: E/AndroidRuntime(13783): at Android.app.ActivityThread.main(ActivityThread.java:3835)

4

2 に答える 2

0

問題は、設定する前に「mview」にアクセスしようとしていることです。

List<Overlay> mapOverlays = mview.getOverlays(); 

このコード行を setcontentview の直後に配置します

mview =(MapView)findViewById(R.id.mapv);  
于 2012-04-17T17:55:20.437 に答える
0

インテントを介して値を取得する代わりに、この方法を使用して実行しました...`

The class showing list場所の

public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
          //  String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
            String lat = ((TextView) view.findViewById(R.id.lat)).getText().toString();
           // String description = ((TextView) view.findViewById(R.id.description)).getText().toString();
            String lng = ((TextView) view.findViewById(R.id.lng)).getText().toString();
            // Starting new intent
            Intent in = new Intent(getApplicationContext(), ViewOnMap.class);
          //  in.putExtra(KEY_NAME, name);
           // in.putExtra(KEY_DESC, description);
          //  in.putExtra(KEY_LAT, lat);
           // in.putExtra(KEY_LONG, lng);

            latitude = Double.parseDouble(lat);
            longitude = Double.parseDouble(lng);
            ViewOnMap.putLatLong(latitude,longitude);
            startActivity(in);

クラスの次 マップを表示する 値を取得するための新しいメソッドを 1 つ作成する

    public class ViewOnMap extends MapActivity {
private static double lat;
private static double lng;
private int latitude;
private int longitude;
MapView mview;
MapController mcontrol;
LocationManager locmanager;
Location location;
GeoPoint geopoint;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);
    mview =(MapView)findViewById(R.id.mapv);
    //Intent in = getIntent();
    //  String lat = in.getStringExtra(KEY_LAT);
     // String lng = in.getStringExtra(KEY_LONG);

       latitude = (int) (lat*1e6);
       longitude = (int) (lng*1e6);

      //if(in!=null)
     mview =(MapView)findViewById(R.id.mapv);
      mview.displayZoomControls(true);
      mview.setBuiltInZoomControls(true);
      mcontrol =mview.getController();
      int maxZoom = mview.getMaxZoomLevel();
      int initZoom = (int)(0.80*(double)maxZoom);
      GeoPoint point = new GeoPoint(latitude,longitude);
      mcontrol.animateTo(point); 
      mcontrol.setZoom(initZoom);


    List<Overlay> mapOverlays = mview.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.marker);
    MapOverlay itemizedoverlay = new MapOverlay(drawable, this);


     OverlayItem overlayitem = new OverlayItem(point, "some school", "some City!");

    itemizedoverlay.addOverlay(overlayitem);
    mapOverlays.add(itemizedoverlay);
}
public static void putLatLong(double latitude, double longitude){
    lat = latitude;
    lng = longitude;
}
@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}


}

`

于 2012-04-18T15:48:30.383 に答える