2014-09-15 2 views
0


Так что я работаю над приложением, использующим API Google Maps v2 для отображения наложения карты. Я знаю, что этот вопрос задавали раньше, но я все пробовал. Я тестирую свое приложение с помощью устройства Nexus 5, которое не внедрено и установлено Google Play Services.Не удалось найти класс com.google.android.gms.maps.SupportMapFragment

LogCat отображает следующие:

09-14 20:18:27.646: E/dalvikvm(10951): Could not find class 'com.google.android.gms.maps.SupportMapFragment', referenced from method com.bryansworld.algonquinreview.MainActivity.setUpMapInitial 
09-14 20:18:27.686: E/AndroidRuntime(10951): FATAL EXCEPTION: main 
09-14 20:18:27.686: E/AndroidRuntime(10951): Process: com.bryansworld.algonquinreview, PID: 10951 
09-14 20:18:27.686: E/AndroidRuntime(10951): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bryansworld.algonquinreview/com.bryansworld.algonquinreview.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class fragment 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.os.Handler.dispatchMessage(Handler.java:102) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.os.Looper.loop(Looper.java:136) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.ActivityThread.main(ActivityThread.java:5001) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at java.lang.reflect.Method.invokeNative(Native Method) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at java.lang.reflect.Method.invoke(Method.java:515) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at dalvik.system.NativeStart.main(Native Method) 
09-14 20:18:27.686: E/AndroidRuntime(10951): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class fragment 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.Activity.setContentView(Activity.java:1929) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at com.bryansworld.algonquinreview.MainActivity.onCreate(MainActivity.java:33) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.Activity.performCreate(Activity.java:5231) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
09-14 20:18:27.686: E/AndroidRuntime(10951): ... 11 more 
09-14 20:18:27.686: E/AndroidRuntime(10951): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.SupportMapFragment: make sure class name exists, is public, and has an empty constructor that is public 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.Fragment.instantiate(Fragment.java:597) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.Fragment.instantiate(Fragment.java:561) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.Activity.onCreateView(Activity.java:4778) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 
09-14 20:18:27.686: E/AndroidRuntime(10951): ... 21 more 
09-14 20:18:27.686: E/AndroidRuntime(10951): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.maps.SupportMapFragment" on path: DexPathList[[zip file "/data/app/com.bryansworld.algonquinreview-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.bryansworld.algonquinreview-1, /vendor/lib, /system/lib]] 
09-14 20:18:27.686: E/AndroidRuntime(10951): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
09-14 20:18:27.686: E/AndroidRuntime(10951): at android.app.Fragment.instantiate(Fragment.java:583) 
09-14 20:18:27.686: E/AndroidRuntime(10951): ... 24 more 

В основном, это говорит, что он не может найти класс com.google.android.gms.maps.SupportMapFragment. Хотя я уверен, что ссылался на Службы Google Play в своем основном проекте.



На следующем рисунке показано, что я ссылки Google Play Services в моем проекте: Showing that I referenced Google Play Services



Кроме того, вот мой ApplicationManifest.xml:

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

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="21" /> 

    <!-- Permissions for operation --> 
    <permission android:name="com.bryansworld.algonquinreview.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> 
    <uses-permission android:name="com.bryansworld.algonquinreview.package.permission.MAPS_RECEIVE"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
    <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=".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> 

     <!-- Google API Key --> 
     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="KEY_GOES_HERE" /> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

    </application> 

</manifest> 



Наконец, вот мой MainActivity.java (До сих пор он был скопирован из демонстрации Google API):

package com.bryansworld.algonquinreview; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.TileOverlay; 
import com.google.android.gms.maps.model.TileOverlayOptions; 
import com.google.android.gms.maps.model.TileProvider; 
import com.google.android.gms.maps.model.UrlTileProvider; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.CheckBox; 

import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Locale; 

public class MainActivity extends FragmentActivity { 
    //The Algonquin Map URL 
    private static final String ALGONQUIN_URL_FORMAT = 
      "http://www.muscedere.ca/algonquin_map/%d/%d/%d.png"; 

    //Map Elements 
    private GoogleMap mMap; 
    private TileOverlay mTiles; 

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

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

    private void setUpMapInitial(){ 
     //Check to ensure map isn't already set up. 
     if (mMap == null) { 
      // Try to obtain the map from the SupportMapFragment. 
      mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 

      //Now, we see if we are successful. 
      if (mMap != null) { 
       setUpMap(); 
      } 
     } 
    } 

    private void setUpMap() { 
     mMap.setMapType(GoogleMap.MAP_TYPE_NONE); 

     TileProvider tileProvider = new UrlTileProvider(256, 256) { 
      @Override 
      public synchronized URL getTileUrl(int x, int y, int zoom) { 
       // The moon tile coordinate system is reversed. This is not normal. 
       int reversedY = (1 << zoom) - y - 1; 
       String s = String.format(Locale.US, ALGONQUIN_URL_FORMAT, zoom, x, reversedY); 
       URL url = null; 
       try { 
        url = new URL(s); 
       } catch (MalformedURLException e) { 
        throw new AssertionError(e); 
       } 
       return url; 
      } 
     }; 

     mTiles = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider)); 
    } 

    public void setFadeIn(View v) { 
     if (mTiles == null) { 
      return; 
     } 
     mTiles.setFadeIn(((CheckBox) v).isChecked()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 



Если у кого-то есть идеи, это было бы здорово! Довольно смутно.

+1

Ничто не выскакивает на меня как источник вашей проблемы. Тем не менее, почему вы используете' SupportMapFragment' и 'FragmentActivity' так или иначе? Ваш' minSdkVersion' 14, который означает, что вы можете использовать нативные фрагменты вместо backport. – CommonsWare

+0

Это правда. Не осознавал этого! Я переключил свой код с «SupportMapFragment» на «MapFragment», но теперь я просто получаю 'com.google.android.gms.maps Ошибка .MapFragment'. –

+1

Вы сделали что-нибудь для своего проекта для добавления в SDK Play Services, кроме добавления его в раздел Android настроек вашего проекта (на скриншот)? Например, вы также вручную столкнулись с вашей сборкой path? Если это так, отмените это и посмотрите, поможет ли это. – CommonsWare

ответ

0

Вы попробовали это предложение: Unable instantiate android.gms.maps.MapFragment?

«Попробуйте щелкнуть правой кнопкой мыши на проект в Eclipse, выберите Android Tools> Добавить библиотеку поддержки. В моем случае это был несвежий версия взята из ActionBarSherlock.»

+0

Я полностью выполнил это предложение и все еще не работал. –

+0

Прошу прощения, я не использовал Eclipse почти год, и у меня его нет, чтобы попробовать каждое средство, но вы сделали это как здесь: https://blog-emildesign.rhcloud.com/?p = 435? В нем говорится, что необходимо добавить библиотеку поддержки и, возможно, проверить разрешения. –

0
  • Я не вижу, что вы упоминаете добавления библиотеки Android поддержки android-support-v4.jar. Вы должны убедиться, что Eclipse, правильно включить его для com.google.android.gms.maps.SupportMapFragment работы:

    Eclipse Android project included libraries path

  • Другой потенциальной проблемой является несоответствие библиотеки игровых сервисов в вашем приложении и Verion игровые услуги на вашем Nexus 5 устройства. Если вы скачали последнюю библиотеку из диспетчера SDK, она может быть более высокой, чем версия на вашем устройстве. Я предполагаю, что ваша версия игровых сервисов на устройстве 5.0.89, вы можете проверить на устройстве Settings -> Apps -> Downloaded -> Google Play Services. Попробуйте использовать более старую версию библиотеки, если это так.

Finding Google Play Services version

0

При импорте Google играть сервис-Lib, вы добавить его в рабочее пространство. попробуйте добавить его в рабочую область

0
  1. Вы когда-нибудь были уверены, что google-play-services_lib находится в том же каталоге с вашим текущим проектом?
  2. Убедитесь, что добавлен «android-support-v4.jar».
  3. Не видел, чтобы вы отображали файл макета. Убедитесь, что вы добавляете "элемент. enter image description here
Смежные вопросы