1

Я знаю, что это дублированный вопрос, но решения из предыдущего сообщения не работают для меня. Вот почему я задаю этот вопрос.Ошибка раздувания фрагмента класса Android map v2

Я пытаюсь реализовать Google Map V2 в Android App, я получил ниже ошибки

06-26 19:24:51.035: E/AndroidRuntime(7679): FATAL EXCEPTION: main 
06-26 19:24:51.035: E/AndroidRuntime(7679): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.titutorial.mapdemo/com.titutorial.mapdemo.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.ActivityThread.access$600(ActivityThread.java:140) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.os.Looper.loop(Looper.java:137) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.ActivityThread.main(ActivityThread.java:4898) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at dalvik.system.NativeStart.main(Native Method) 
06-26 19:24:51.035: E/AndroidRuntime(7679): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.view.LayoutInflater.inflate(LayoutInflater.java:466) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:308) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.Activity.setContentView(Activity.java:1924) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at com.titutorial.mapdemo.MainActivity.onCreate(MainActivity.java:12) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.Activity.performCreate(Activity.java:5206) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  ... 11 more 
06-26 19:24:51.035: E/AndroidRuntime(7679): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.Fragment.instantiate(Fragment.java:584) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.Fragment.instantiate(Fragment.java:552) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.Activity.onCreateView(Activity.java:4849) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  ... 20 more 
06-26 19:24:51.035: E/AndroidRuntime(7679): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  at android.app.Fragment.instantiate(Fragment.java:574) 
06-26 19:24:51.035: E/AndroidRuntime(7679):  ... 23 more 

Я последовал ниже учебник,

https://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_api

я сделал ниже вещи

  1. Установить службу Google Play эс
  2. Создано новое приложение в консоли Google, и получил Google Map API ключ
  3. Создано новое приложение в затмении и добавил разрешения и Google Map API ключ в AndroidManifest.xml
  4. Добавлена ​​Google Play библиотеки Услуги для App
  5. Добавить карту в App (main.xml)
  6. Установить уровень целевой API 17

в моем main.xml

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:name="com.google.android.gms.maps.MapFragment"/> 

здесь мой полный исходный код https://github.com/railskarthi/MapDemo

ответ

9

После API 11+, я думаю, что теперь у вас есть, придется заменить MapFragment на SupportMapFragment. Было бы что-то вроде:

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/map" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:name="com.google.android.gms.maps.SupportMapFragment"/> 

Посмотрите here для получения дополнительной информации. Дайте мне знать, как вы собираетесь.

+0

Yugi, я сделал два изменения 1) распространил свою MainActivity от FragmentActivity вместо Activity 2) in main.xml изменено на <фрагмент xmlns: android = "http://schemas.android.com/apk/res/android " android: id =" @ + id/map " android: layout_width =" match_parent " android: layout_height =" match_parent " class =" com.google.android.gms.maps. SupportMapFragment "/> Теперь карта работает, но теперь я хочу добавить вид карты в линейную компоновку. Как я могу ее достичь? (Потому что здесь мы расширяемся от FragmentActivity) –

+0

@Karthi, Добавьте свой предыдущий код внутри' LinearLayout' на вашем main.xml – yugidroid

+0

Yugi, ваше решение, заменяющее MapFragment на SupportMapFragment, работает только в среде Windows. Но в Mac OSX все еще я получаю ошибку, раздувая ошибку фрагмента класса. Должен ли я делать что-то другое для Mac OSX? –

1

Я загрузил ваш проект с git, и после проверки я обнаружил, что вы пропустили строку, которая требуется для отображения карты Fragment.

Заменить основной код активности с помощью следующего кода: -

public class MainActivity extends FragmentActivity { 
private GoogleMap map; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
      .getMap(); 
} 
1

Это может произойти также, если вы не определили api_key для карт Google в вашем файле манифеста.

Это выглядит следующим образом:

`.... 
<meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="<your key>" /> 
....` 

Создать свой ключ в Google Developer Console

0

Пожалуйста, добавьте эти строки в ваш файл манифеста

 <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

    <!-- Goolge API Key --> 
    <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="your Goolge API key" />