1

嗨,我正在尝试使用支持地图片段来显示谷歌地图片段,尽管我的项目同时具有 android-support-v4 jar 和 google-play-service_lib jar,但到目前为止没有任何乐趣

这是我的布局

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

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

</RelativeLayout>

我的地图活动

package com.jr.haliotest;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.jr.haliotest.utils.IntentFilters;
import com.jr.haliotest.utils.Position;

/**
 * @author RichardsJ
 * 
 */
public class MapActivity extends FragmentActivity  implements IntentFilters {

    private GoogleMap googleMap;

    private Position mPosition;

    private CameraPosition mCameraPosition;

    /*
     * (non-Javadoc)
     * 
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map_view_layout); //fails here
        mPosition = getIntent().getParcelableExtra(INTENT_EXTRA_POSITION);
        mCameraPosition = new CameraPosition(new LatLng(
                mPosition.getLattitude(), mPosition.getLongetude()), 0, 0, 0);
        initialiseView();
    }

    private void initialiseView() {

        googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

        if (googleMap == null) {
            Log.d("", "Map wasnt loaded properly");
        } else {
            Log.d("", "Map loaded fine");
            googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        }

        googleMap.moveCamera(CameraUpdateFactory
                .newCameraPosition(mCameraPosition));

    }
}

完整的堆栈跟踪

  03-29 00:20:17.501: E/AndroidRuntime(2211): FATAL EXCEPTION: main
03-29 00:20:17.501: E/AndroidRuntime(2211): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
03-29 00:20:17.501: E/AndroidRuntime(2211):     at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:279)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:365)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.app.Activity.setContentView(Activity.java:1912)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at com.jr.haliotest.MapActivity.onCreate(MapActivity.java:36)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.app.Activity.performCreate(Activity.java:5066)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1101)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.app.ActivityThread.access$600(ActivityThread.java:151)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.os.Looper.loop(Looper.java:155)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at android.app.ActivityThread.main(ActivityThread.java:5485)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at java.lang.reflect.Method.invokeNative(Native Method)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at java.lang.reflect.Method.invoke(Method.java:511)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
03-29 00:20:17.501: E/AndroidRuntime(2211):     at dalvik.system.NativeStart.main(Native Method)

如果我使用 MapFragment 对象而不是支持的对象,它工作正常。

有任何想法吗?我错过了什么?尝试清洁,关闭日食,重新安装应用程序,没有乐趣

4

2 回答 2

5

我设法让它工作。

以下是有关如何将支持的库与 google map v2 一起使用的具体步骤。

  1. 将 google play 服务库复制到您的 lib 文件夹中
  2. 在您的 lib 文件夹中复制 android 支持的 v4 lib
  3. 将 1 和 2 添加到构建路径
  4. 将 google play 服务项目导入您的工作区
  5. 选择你的项目并点击>属性>android>添加项目库(谷歌播放服务),不要勾选“是库”
  6. 选择google play服务项目并右键单击并转到属性>android>勾选“is lib”
  7. 使用 FragmentActivity 并使用 Support 来使用支持的库。
  8. 清理并重建,退出 Eclipse,之前在您的设备上卸载应用程序,加载 Eclipse 并进行另一次清理和重建。现在应该一切正常
于 2013-03-29T11:41:14.783 回答
0

您需要获取 Google Play SDK:

http://developer.android.com/google/play-services/index.html

基本上,您的 extras 目录中可能有代码,因此您将其导入您的工作区,然后编译它,将其作为库添加到您的项目中,您应该已设置好。

于 2013-03-29T00:33:31.123 回答