Я пытаюсь начать Place.Class
, которые показывают больше деталей каждого места.
После этого у меня AboutMap
расширяется MapActivity
. Я также создаю AlertDialog с кнопкой See more detail
здесь. Но это не работает .. Когда я запускаю программу, она падает после нажатия кнопки See more detail
. И я не получил именно тот результат, которым это должно быть .. Я думаю, что это должно быть где-то неправильно .. может быть здесь
Intent i = new Intent(mContext, Place.class);
// Но я не знаю, как это исправить
Ребята, у вас есть идеи? Большое спасибо за вашу помощь
PlaceItemizedOverlay
public class PlaceItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private Context mContext;
private Cursor c;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public PlaceItemizedOverlay(Drawable defaultMarker, Context context)
{
super(boundCenterBottom(defaultMarker));
mContext = context;
}
public PlaceItemizedOverlay(Context context)
{
super(boundCenterBottom(null));
mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size(); }
@Override
protected boolean onTap(int index) {
//Create AlertDialog
final OverlayItem oi = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(oi.getTitle());
dialog.setMessage(oi.getSnippet());
dialog.setNegativeButton("Back", null);
//Create See more detail Button
dialog.setPositiveButton("See More Detail", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//Line 87: Logcat tell that there are some problem around here
Intent i = new Intent(mContext, Place.class);
i.putExtra(Constants.KEY_ID, c.getInt(
c.getColumnIndex(Constants.KEY_ID)));
i.putExtra(Constants.COL_TITLE, c.getString(
c.getColumnIndex(Constants.COL_TITLE)));
i.putExtra(Constants.COL_ADDRESS, c.getString(
c.getColumnIndex(Constants.COL_ADDRESS)));
i.putExtra(Constants.COL_CONTENT, c.getString(
c.getColumnIndex(Constants.COL_CONTENT)));
mContext.startActivity(i);
}});
dialog.show();
return true;
}
}
AboutMap.class
public class AboutMap extends MapActivity {
MapView mapView;
MapController mapController;
private static MyDB mDbHelper;
private Cursor c;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aboutcm);
mDbHelper = new MyDB(this);
mDbHelper.createDatabase();
mDbHelper.open();
c = mDbHelper.getAttraction();
mapView = (MapView) findViewById(R.id.mapview);
mapController = mapView.getController();
Drawable drawable = this.getResources().getDrawable(R.drawable.map_pin_3);
List<Overlay> mapOverlays = mapView.getOverlays();
PlaceItemizedOverlay itemizedoverlay = new PlaceItemizedOverlay(drawable, this);
mapController.setZoom(13);
mapView.setBuiltInZoomControls(true);
c.moveToFirst();
do {
String title = c.getString(c
.getColumnIndex(Constants.COL_TITLE));
String address = c.getString(c
.getColumnIndex(Constants.COL_ADDRESS));
int latitude = (int) (c.getDouble(c
.getColumnIndex(Constants.COL_LA)) * 1E6);
int longitude = (int) (c.getDouble(c
.getColumnIndex(Constants.COL_LONG)) * 1E6);
itemizedoverlay.addOverlay(new OverlayItem(new GeoPoint(latitude, longitude), title,
address));
mapOverlays.add(itemizedoverlay);
} while (c.moveToNext());
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
Logcat
09-04 14:31:29.019: DEBUG/AndroidRuntime(975): Shutting down VM
09-04 14:31:29.029: WARN/dalvikvm(975): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
09-04 14:31:29.029: ERROR/AndroidRuntime(975): Uncaught handler: thread main exiting due to uncaught exception
09-04 14:31:29.069: ERROR/AndroidRuntime(975): java.lang.NullPointerException
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at com.ctg.PlaceItemizedOverlay$1.onClick(PlaceItemizedOverlay.java:87)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at android.os.Looper.loop(Looper.java:123)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at android.app.ActivityThread.main(ActivityThread.java:4363)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at java.lang.reflect.Method.invoke(Method.java:521)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-04 14:31:29.069: ERROR/AndroidRuntime(975): at dalvik.system.NativeStart.main(Native Method)
09-04 14:31:29.099: INFO/Process(53): Sending signal. PID: 975 SIG: 3