我正在尝试运行一个显示地图的简单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 Libraries
和Android 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:38.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:38.070:E / AndroidRuntime(17429):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1884)
03-08 22:10:38.070:E / AndroidRuntime(17429):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985)
03-08-22:10:38.070:E / AndroidRuntime(17429):at android.app.ActivityThread.access $ 600(ActivityThread.java:127)
03-08-22:10:38.070:E / AndroidRuntime(17429):位于android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1151)
03-08 22:10:38.070:E / AndroidRuntime(17429):位于android.os.Handler.dispatchMessage(Handler.java:99)
03-08 22:10:38.070:E / AndroidRuntime(17429):位于android.os.Looper.loop(Looper.java:137)
03-08 22:10:38.070:E / AndroidRuntime(17429):位于android.app.ActivityThread.main(ActivityThread.java:4447)
03-08 22:10:38.070:E / AndroidRuntime(17429):at java.lang.reflect.Method.invokeNative(本机方法)
03-08 22:10:38.070:E / AndroidRuntime(17429):at java.lang.reflect.Method.invoke(Method.java:511)
03-08 22:10:38.070:E / AndroidRuntime(17429):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
03-08 22:10:38.070:E / AndroidRuntime(17429):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-08 22:10:38.070:E / AndroidRuntime(17429):在dalvik.system.NativeStart.main(本机方法)
03-08 22:10:38.070:E / AndroidRuntime(17429):原因:java.lang.ClassNotFoundException:com.example.mapasimple.MainActivity
03-08 22:10:38.070:E / AndroidRuntime(17429):在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
03-08 22:10:38.070:E / AndroidRuntime(17429):at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
03-08 22:10:38.070:E / AndroidRuntime(17429):at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
03-08 22:10:38.070:E / AndroidRuntime(17429):位于android.app.Instrumentation.newActivity(Instrumentation.java:1066)
03-08 22:10:38.070:E / AndroidRuntime(17429):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1875)
03-08 22:10:38.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" />