2012-01-26 3 views
4

Я проверил программу, которая использует карты Google после учебника. Я сделал все как в учебнике, но мое приложение вылетает, даже показывая что-либо с сообщением «К сожалению, HelloGoogleMaps остановился». Я попытался отладить, и кажется, что он сработал даже до ввода метода onCreate. Это мой код:Использование Google Map в Android

package ru.medinfo.HelloGoogleMaps; 

import android.os.Bundle; 

import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapView; 

public class HelloGoogleMapsActivity extends MapActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     //getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     super.onCreate(savedInstanceState); 
     MapView mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setBuiltInZoomControls(true); 
     setContentView(R.layout.main); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    } 
} 

Вход после исключения:

01-27 16:22:34.195: W/dalvikvm(1038): Unable to resolve superclass of Lru/medinfo/HelloGoogleMaps/HelloGoogleMapsActivity; (3) 
01-27 16:22:34.195: W/dalvikvm(1038): Link of class 'Lru/medinfo/HelloGoogleMaps/HelloGoogleMapsActivity;' failed 
01-27 16:22:34.385: D/AndroidRuntime(1038): Shutting down VM 
01-27 16:22:34.385: W/dalvikvm(1038): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
01-27 16:22:34.415: E/AndroidRuntime(1038): FATAL EXCEPTION: main 
01-27 16:22:34.415: E/AndroidRuntime(1038): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ru.medinfo.HelloGoogleMaps/ru.medinfo.HelloGoogleMaps.HelloGoogleMapsActivity}: java.lang.ClassNotFoundException: ru.medinfo.HelloGoogleMaps.HelloGoogleMapsActivity 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.os.Looper.loop(Looper.java:137) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at dalvik.system.NativeStart.main(Native Method) 
01-27 16:22:34.415: E/AndroidRuntime(1038): Caused by: java.lang.ClassNotFoundException: ru.medinfo.HelloGoogleMaps.HelloGoogleMapsActivity 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871) 
01-27 16:22:34.415: E/AndroidRuntime(1038):  ... 11 more 
01-27 16:22:34.465: W/ActivityManager(87): Force finishing activity ru.medinfo.HelloGoogleMaps/.HelloGoogleMapsActivity 
01-27 16:22:34.488: W/WindowManager(87): Failure taking screenshot for (180x300) to layer 21010 
01-27 16:22:35.001: W/ActivityManager(87): Activity pause timeout for ActivityRecord{41472d50 ru.medinfo.HelloGoogleMaps/.HelloGoogleMapsActivity} 
01-27 16:22:35.295: W/NetworkManagementSocketTagger(87): setKernelCountSet(10044, 0) failed with errno -2 
01-27 16:22:45.295: W/ActivityManager(87): Activity destroy timeout for ActivityRecord{41472d50 ru.medinfo.HelloGoogleMaps/.HelloGoogleMapsActivity} 

Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="ru.medinfo.HelloGoogleMaps" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="15" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

    <uses-library android:name="com.google.android.maps" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity android:name=".HelloGoogleMapsActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

post logcat error stacktrace here. – kosa

+0

, пожалуйста, вставьте свой МАНИФЕСТ! –

+0

сделано. добавлен манифест тоже. Я сделал все другие учебники, кроме Google Maps. Он использует MapActivity вместо Activity, и я думаю, что это проблема. Это суперкласс класса HelloGoogleMapsActivity. И журнал говорит, что этот суперкласс не разрешен. Я думаю, что MapActivity не найден по какой-то причине ... – wzbozon

ответ

2

Поместите <uses-library android:name="com.google.android.maps" /> внутри тега вашего приложения в манифесте

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="ru.medinfo.HelloGoogleMaps" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="15" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

     <uses-library android:name="com.google.android.maps" /> 

     <activity android:name=".HelloGoogleMapsActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

Спасибо всем, кто помог, я потратил около 4 часов на эту ошибку. Здесь проблема была. Моя глупость, что я не следовал учебнику в этом месте «Откройте файл AndroidManifest.xml и добавьте следующее в качестве дочернего элемента :« По крайней мере, я научился решать такие ошибки. Я понял, что проблема в том, что MapActivity не найдена, но почему - вот где я остановился. – wzbozon

+0

Добро пожаловать. Я думаю, вы не первый, кто столкнулся с этой проблемой .. :) – SERPRO

0

Я думаю, что порядок должен быть, как это ниже.

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
     MapView mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setBuiltInZoomControls(true); 
+0

Это не сработало. Я отправил журнал. В нем указано, что класс ru.medinfo.HelloGoogleMaps.HelloGoogleMapsActivity не найден? Что может быть причиной? – wzbozon

0

У меня была аналогичная проблема. Но после перемещения в соответствии с разъяснениями в предыдущем сообщении; это сработало.

Что касается первоначального исключения; попробуйте использовать следующий пример кода:

package com.example.hellogooglemaps; 

    import android.os.Bundle; 
    import android.graphics.drawable.*; 
    import com.google.android.maps.*; 
    import java.util.*; 

    public class HelloGoogleMapsActivity extends MapActivity { 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      MapView mapView = (MapView) findViewById(R.id.mapview); 
      mapView.setBuiltInZoomControls(true); 

      List<Overlay> mapOverlays = mapView.getOverlays(); 
      Drawable drawable = this.getResources().getDrawable(R.drawable.android); 
      HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this); 

      GeoPoint point = new GeoPoint(19240000,-99120000); 
      OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!"); 

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

     @Override 
     protected boolean isRouteDisplayed() { 
      return false; 
     } 
    }