我在我的应用程序中找到了地点列表,并且我已经将经度和经度传递给另一个类以在地图上显示该位置,但是在点击列出的地点后显示“强制关闭应用程序”。
代码是:
使用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):在android.app.ActivityThread.main(ActivityThread.java:3835)
答案 0 :(得分:0)
问题是您在设置之前尝试访问“mview”。
List<Overlay> mapOverlays = mview.getOverlays();
将这行代码放在setcontentview
之后mview =(MapView)findViewById(R.id.mapv);
答案 1 :(得分: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);
类中的下一个显示地图创建一个新方法来获取值
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;
}
}
`