2013-12-25 5 views
6

Я пытался показать карты в приложении android. Я использую карту V2. Но ошибка «Бинарная строка XML-файла # 9: ошибка раздувания фрагмента класса». Приложение запускается при запуске.android: двоичная строка XML-файла # 9: фрагмент фрагмента фрагмента ошибки

Ниже приведен мой код. Пожалуйста, помогите мне в решении этой вещи

MainActivity.Java

package com.example.googlemapsv2; 
    import android.os.Bundle; 
    import android.support.v4.app.FragmentActivity; 

    public class MainActivity extends FragmentActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
    } 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:map="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<fragment 
    android:name="com.google.android.gms.maps.SupportMapFragment" 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</LinearLayout> 

Android явить

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.googlemapsv2" 
android:versionCode="1" 
android:versionName="1.0" > 
<permission 
    android:name="com.example.googlemapsv2.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.example.googlemapsv2.permission.MAPS_RECEIVE" /> 
<uses-sdk 
    android:minSdkVersion="12" 
    android:targetSdkVersion="18" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<!-- Required to show current location --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<!-- Required OpenGL ES 2.0. for Maps V2 --> 
<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true" /> 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.googlemapsv2.MainActivity" 
     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> 
<meta-data 
android:name="com.google.android.maps.v2.API_KEY" 
android:value="AIzaSyBAvQK4RAin10dqyflr95tH45Ce_Eko3G0" /> 
<meta-data 
android:name="com.google.android.gms.version" 
android:value="@integer/google_play_services_version" /> 
</manifest> 
+0

изменение этого 'андроид: minSdkVersion = "12"' '11' к – Raghunandan

+0

@Raghunandan:. это не будет помогать мне в любом случае. Я использую эмулятор 4.3. Ради вас, я попробовал. По-прежнему такая же ошибка – Ram

+1

https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapFragment. pls check this Использовать этот класс, только если вы нацеливаете API 12 и выше. В противном случае используйте SupportMapFragment .. почему это не поможет ?. Ваш min sdk - 12, в этом случае вы должны использовать «MapFragment» и продлевать «Активность». Также я разместил его как комментарий, а не ответ. Нужна дополнительная информация. Вы ссылались на проект библиотеки Google Play. – Raghunandan

ответ

8

В приведенной ниже должен быть внутри application теге файла манифеста

Ссылка

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

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

Поскольку ваш minsdk равен 12. Вам необходимо использовать MapFragment, и ваш класс должен продлить Activity.

<fragment 
android:name="com.google.android.gms.maps.MapFragment" 
android:id="@+id/map" 
android:layout_width="match_parent" 
android:layout_height="match_parent" /> 

Тогда

public class MainActivity extends Activity 

Убедитесь, что ссылки на проект библиотеки правильно и включены карты для андроид в консоли API Google.

+2

Я могу это .. Спасибо Рагу .. Проблема решена ... – Ram

+0

Downvote? любая причина??? – Raghunandan

+0

У меня была такая же проблема. Спасибо за ответ! – Bonton255

5

Попробуйте это SupportMapFragment activity_main.xml

изменения андроид: имя для простого класса

<fragment 
    class="com.google.android.gms.maps.SupportMapFragment" 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

MainActivity.java

public class MainActivity extends FragmentActivity { 

    // Google Map 
    private GoogleMap googleMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     try { 
      // Loading map 
      initializeMap(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    /** 
    * function to load map. If map is not created it will create it for you 
    * */ 
    private void initializeMap() { 
     if (googleMap == null) { 
      googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
      // check if map is created successfully or not 
      if (googleMap == null) { 
       Toast.makeText(getApplicationContext(), 
        "Sorry! unable to create maps", Toast.LENGTH_SHORT) 
        .show(); 
      } 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 
} 

Изменение SDK версии

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

Raghunandan правильно, вы должны написать <meta> код тега внутри <application>.

+0

Приложение сбой даже до инициализации объекта GoogleMap. – Raghunandan

+0

@Raghunandan. Как это может быть, я использую тот же самый код в своем приложении. , и я инициализирую, если это 'null' в частной функции initializeMap. –

+0

см. Https://developers.google.com/maps/documentation/android/start#add_the_google_play_services_version_to_your_apps_manifest. PLS проверить тему Добавить карту. проверьте шаги 1,2 и 3. Таким образом, вы должны увидеть карту. Если вы хотите поместить маркер, вам необходимо инициализировать объект карты. – Raghunandan

0

В моем опыте ранее API 18/19 необходимо добавлять в menifest -> обновление приложения мета-данных Q обновляется с версии:

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

0

У меня была такая же проблема, я решил ее путем добавления разрешений как указано в официальном документе (Google map doc on permissions)

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

Смежные вопросы