我正在尝试运行一个显示地图的简单android项目。

我已经按照Google Maps link中的所有步骤进行操作,但是eclipse仅阻止尝试启动该项目。

1-我将google-play-services_lib添加到我的工作区中。
2-我将其复制到工作区中。
3-我用这些创建了一个android项目:

表现


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mapasimple"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
    android:minSdkVersion="12"
    android:targetSdkVersion="21" />
<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"/>
<!-- The following two permissions are not required to use
 Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  <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>
 <meta-data
      android:name="com.google.android.maps.v2.API_KEY" android:value="xxxxxxxx-kfjDVu3590eOxjhrVSc"/>
    <meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
 </application>
</manifest>



主要活动

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends  Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
           requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.activity_main);
        }
}


activity_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"/>


4-我将库添加到我的项目中:



当我尝试运行该项目时,经过一段时间的处理后,Eclipse块就会消失。

这就是我在项目Java Build Path中看到的。


默认情况下选中Android Private LibrariesAndroid Dependencies
如果我取消选中其中之一,那么蚀块也会出现。如果我都取消选中,eclipse将运行项目,但是会出现此错误:

03-09 02:45:59.870:W / dalvikvm(10092):VFY:无法解析虚拟方法7875:Lcom / google / android / gms / maps / GoogleMap; .setMapType(I)V
03-09 02:45:59.870:D / dalvikvm(10092):VFY:在0x0003处替换操作码0x6e
03-09 02:45:59.870:E / dalvikvm(10092):找不到方法com.example.mapasimple.MainActivity.setUpMapIfNeeded引用的类'com.google.android.gms.maps.SupportMapFragment'
03-09 02:45:59.870:W / dalvikvm(10092):VFY:无法解析Lcom / example / mapasimple / MainActivity中的check-cast 1130(Lcom / google / android / gms / maps / SupportMapFragment;);
03-09 02:45:59.870:D / dalvikvm(10092):VFY:在0x000f处替换操作码0x1f
03-09 02:45:59.940:D / AndroidRuntime(10092):关闭VM
03-09 02:45:59.960:W / dalvikvm(10092):threadid = 1:线程以未捕获的异常退出(group = 0x40a641f8)
03-09 02:45:59.970:E / AndroidRuntime(10092):致命异常:主
03-09 02:45:59.970:E / AndroidRuntime(10092):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.mapasimple / com.example.mapasimple.MainActivity}:android.view.InflateException:二进制XML文件第9行:错误夸大类片段
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1960)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985)
03-09 02:45:59.970:E / AndroidRuntime(10092):at android.app.ActivityThread.access $ 600(ActivityThread.java:127)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1151)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.os.Handler.dispatchMessage(Handler.java:99)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.os.Looper.loop(Looper.java:137)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.ActivityThread.main(ActivityThread.java:4447)
03-09 02:45:59.970:E / AndroidRuntime(10092):at java.lang.reflect.Method.invokeNative(本机方法)
03-09 02:45:59.970:E / AndroidRuntime(10092):at java.lang.reflect.Method.invoke(Method.java:511)
03-09 02:45:59.970:E / AndroidRuntime(10092):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-09 02:45:59.970:E / AndroidRuntime(10092):在dalvik.system.NativeStart.main(本机方法)
03-09 02:45:59.970:E / AndroidRuntime(10092):原因:android.view.InflateException:二进制XML文件第9行:夸大类片段的错误
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.view.LayoutInflater.inflate(LayoutInflater.java:489)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.view.LayoutInflater.inflate(LayoutInflater.java:396)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.view.LayoutInflater.inflate(LayoutInflater.java:352)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:264)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.Activity.setContentView(Activity.java:1836)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于com.example.mapasimple.MainActivity.onCreate(MainActivity.java:23)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.Activity.performCreate(Activity.java:4466)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1092)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1924)
03-09 02:45:59.970:E / AndroidRuntime(10092):...还有11个
03-09 02:45:59.970:E / AndroidRuntime(10092):原因:android.app.Fragment $ InstantiationException:无法实例化com.google.android.gms.maps.SupportMapFragment片段:确保存在类名public,并且有一个空的public构造函数
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.Fragment.instantiate(Fragment.java:581)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.Fragment.instantiate(Fragment.java:549)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.Activity.onCreateView(Activity.java:4236)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
03-09 02:45:59.970:E / AndroidRuntime(10092):...还有21个
03-09 02:45:59.970:E / AndroidRuntime(10092):原因:java.lang.ClassNotFoundException:com.google.android.gms.maps.SupportMapFragment
03-09 02:45:59.970:E / AndroidRuntime(10092):在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于java.lang.ClassLoader.loadClass(ClassLoader.java:501)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于java.lang.ClassLoader.loadClass(ClassLoader.java:461)
03-09 02:45:59.970:E / AndroidRuntime(10092):位于android.app.Fragment.instantiate(Fragment.java:571)

我尝试了这些不同的尝试,但没有成功:


在Manifest.xml中添加<uses-library android:name="com.google.android.maps" /><uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
卸载并重新安装Google Play Services
在activity_main.xml中将android:name="com.google.android.gms.maps.MapFragment"更改为class="com.google.android.gms.maps.MapFragment"
删除工作区,然后在新的工作区中再次执行所有过程。
只需将google-play-services.jar添加为外部Jar库。
在每次修改中,我都会清理并构建项目。
我将SDK Target从google-play-services_lib更改了,将项目从4.2.2更改为5.0.1,但没有成功。
我在另一台计算机上完成了所有这些步骤。
最低的AndroidSDK是API 12。


我正在Ubuntu中使用Eclipse Luna。
请我阅读有关此问题的几个答案,但没有任何帮助。任何想法

已更新@RUBEN LUZ答案


import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
public class MainActivity extends  Activity{
GoogleMap googleMap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
           requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.activity_main);
     initilizeMap();
     }
    private void initilizeMap() {
        if (googleMap == null) {
            googleMap = ((MapFragment) ((Activity) getApplicationContext()).getFragmentManager()
                    .findFragmentById(R.id.map)).getMap();
 // check if map is created successfully or not
            if (googleMap == null) {
                Toast.makeText(
                        getApplicationContext().getApplicationContext(),
                        "googlemap null",
                        Toast.LENGTH_SHORT).show();
             }
        }
    }
}



已更新@PREDACTOR答案

现在看来,android无法找到MainActivity类。我已经重新制作了该项目,再次执行所有步骤,并在新的工作区中再次创建它,但始终出现此错误:


  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):java.lang.RuntimeException:无法实例化活动ComponentInfo {com.example.mapasimple / com.example.mapasimple.MainActivity}:java.lang.ClassNotFoundException:com .example.mapasimple.MainActivity
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1884)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985)
  03-08-22:10:3​​8.070:E / AndroidRuntime(17429):at android.app.ActivityThread.access $ 600(ActivityThread.java:127)
  03-08-22:10:3​​8.070:E / AndroidRuntime(17429):位于android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1151)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):位于android.os.Handler.dispatchMessage(Handler.java:99)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):位于android.os.Looper.loop(Looper.java:137)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):位于android.app.ActivityThread.main(ActivityThread.java:4447)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):at java.lang.reflect.Method.invokeNative(本机方法)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):at java.lang.reflect.Method.invoke(Method.java:511)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):在dalvik.system.NativeStart.main(本机方法)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):原因:java.lang.ClassNotFoundException:com.example.mapasimple.MainActivity
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):位于android.app.Instrumentation.newActivity(Instrumentation.java:1066)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1875)
  03-08 22:10:3​​8.070:E / AndroidRuntime(17429):...还有11个

最佳答案

在主要活动中添加此内容

private GoogleMap mMap;


在onCreate方法中添加

setUpMapIfNeeded();


在onCreate方法下,添加此

private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the
    // map.
    if (mMap == null) {
        // Try to obtain the map from the SupportMapFragment.
        mMap = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map)).getExtendedMap();
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            setUpMap();
        }
    }
}

private void setUpMap() {

    mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);

    }

}


您的片段布局应如下所示

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

09-05 14:03
查看更多