웹 서비스에서 좌표를 검색 한 다음 현재 위치와 함께지도에 그 좌표를 그려주는 응용 프로그램을 작성하고 있습니다. 오류가없는 코드를 작성할 수 있지만 나는 문제가 될 수 무엇 충돌 에뮬레이터 ....에서 실행 :안드로이드에서 웹 서비스 좌표를 그릴 때 오류가 발생했습니다.
public abstract class MapActivity extends com.google.android.maps.MapActivity{
// Instance attributes
private MapView mapView = null;
private MapController mc = null;
private GeoPoint p = null;
private LocationManager locationManager;
private LocationListener locationListener;
@Override
protected void onDestroy() {
super.onDestroy();
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_3:
mc.zoomIn();
break;
case KeyEvent.KEYCODE_1:
mc.zoomOut();
break;
}
return super.onKeyDown(keyCode, event);
}
public void initMap(){
// Get the main element
mapView = (MapView) findViewById(R.id.mapView);
mc = mapView.getController();
// Add a zoom
mapView.setBuiltInZoomControls(true);
mapView.displayZoomControls(true);
// Initialize the zoom level
mc = mapView.getController();
mc.setZoom(17);
//---Add a location marker---
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
public void drawElements(MapView mapView, Canvas canvas, String element){
if (mapView == null){
return;
}
try {
// Get elements
JSONObject elements = JSONfunctions.getJSONfromURL("http://10.0.2.2/android/rental.php");
JSONArray results = elements.getJSONArray("rental");
if (results != null && results.length() != 0){
for (int i = 0; i < elements.length(); i++) {
JSONObject result = results.getJSONObject(i);
//---fetch the coordinates from the remote server------
double lat = Double.parseDouble((String) result.get("lat"));
double lon = Double.parseDouble((String) result.get("lon"));
//---translate the GeoPoint to screen pixels---
Point screenPts = new Point();
GeoPoint p = new GeoPoint((int) (lat * 1E6), (int) (lon * 1E6));
mapView.getProjection().toPixels(p, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.red);
canvas.drawBitmap(bmp, screenPts.x-20, screenPts.y-40, null);
}
}
} catch (JSONException e) {
Log.e(null,"JSONException error");
}
}
/**
* Re-center the icon on the map
*/
public void refreshMapLocation(){
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new GPSLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,0, 0,locationListener);
}
private class GPSLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location location) {
GeoPoint p = new GeoPoint(
(int) (location.getLatitude() * 1E6),
(int) (location.getLongitude() * 1E6));
// Animate the map on the point
if (p != null && mc !=null){
mc.animateTo(p);
} else {
Log.e(null,"Couldn't refresh location on the map");
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
protected boolean isRouteDisplayed() {
return false;
}
/**
* Map overlay
*/
class MapOverlay extends com.google.android.maps.Overlay
{
@Override
public boolean draw(Canvas canvas, MapView mapView,
boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
if (p != null){
//---translate the GeoPoint to screen pixels---
Point screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.blue);
canvas.drawBitmap(bmp, screenPts.x-10, screenPts.y-20, null);
}
//drawElements(mapView,canvas,"Hospitals");
return true;
}
}
}
편집 : 여기에 코드입니다. * 로그 캣에 의해 게시 오류를 찾고이 당신이 추상 같은 MapActivity 클래스를 선언하기 때문에 이런 일이
11-20 09:10:31.931: I/Process(756): Sending signal. PID: 756 SIG: 9
11-20 09:39:57.001: D/dalvikvm(789): newInstance failed: p0 i0 [0 a1
11-20 09:39:57.001: D/AndroidRuntime(789): Shutting down VM
11-20 09:39:57.041: W/dalvikvm(789): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-20 09:39:57.091: E/AndroidRuntime(789): FATAL EXCEPTION: main
11-20 09:39:57.091: E/AndroidRuntime(789): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.jkuat.project/com.jkuat.project.MapActivity}: java.lang.InstantiationException: com.jkuat.project.MapActivity
11-20 09:39:57.091: E/AndroidRuntime(789): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
11-20 09:39:57.091: E/AndroidRuntime(789): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-20 09:39:57.091: E/AndroidRuntime(789): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-20 09:39:57.091: E/AndroidRuntime(789): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-20 09:39:57.091: E/AndroidRuntime(789): at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 09:39:57.091: E/AndroidRuntime(789): at android.os.Looper.loop(Looper.java:123)
11-20 09:39:57.091: E/AndroidRuntime(789): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-20 09:39:57.091: E/AndroidRuntime(789): at java.lang.reflect.Method.invokeNative(Native Method)
11-20 09:39:57.091: E/AndroidRuntime(789): at java.lang.reflect.Method.invoke(Method.java:521)
11-20 09:39:57.091: E/AndroidRuntime(789): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-20 09:39:57.091: E/AndroidRuntime(789): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-20 09:39:57.091: E/AndroidRuntime(789): at dalvik.system.NativeStart.main(Native Method)
11-20 09:39:57.091: E/AndroidRuntime(789): Caused by: java.lang.InstantiationException: com.jkuat.project.MapActivity
11-20 09:39:57.091: E/AndroidRuntime(789): at java.lang.Class.newInstanceImpl(Native Method)
11-20 09:39:57.091: E/AndroidRuntime(789): at java.lang.Class.newInstance(Class.java:1429)
11-20 09:39:57.091: E/AndroidRuntime(789): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
11-20 09:39:57.091: E/AndroidRuntime(789): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
11-20 09:39:57.091: E/AndroidRuntime(789): ... 11 more
이클립스를 사용한다면 윈도우 -> 쇼보기 -> 기타 -> android-> LogCat에서 LogCat 창을여십시오. 그것은 일어나고있는 에뮬레이터/장치로 진행되는 모든 것을 인쇄합니다. 프로그램을 다시 실행하십시오. 충돌이 발생하면 스크롤하여 빨간색 텍스트의 거대한 벽을 찾습니다. 보통 오류가 발생하는 곳입니다. 그것은 당신의 문제에 대해 좀 더 통찰력을 제공해야합니다. – vince88
나는 벌써 그랬다 : 이것은 로그 고양이가해야만하는 것이다 : –