2013-05-08 59 views
0

我正在創建一個本機擴展,它顯示來自基於Flex的AIR應用程序的本地Google Map。您可以觀看lee brimelow的演示,以獲得這個想法:https://plus.google.com/110495278155587072613/posts/degSYVx8423谷歌地圖ane:RuntimeException:試圖創建多個DataRequestDispatchers

我得到了一個本機擴展的工作演示,只是用一些按鈕顯示一個活動,但當我試圖顯示地圖時卡住了。下面是對的setContentView(layoutID),我發現了異常:

 
    05-08 11:48:40.624: I/System.out(27917): WebViewActivity.onCreate failed with error: 
    05-08 11:48:40.634: I/System.out(27917): "android.view.InflateException: Binary XML file line #9: Error inflating class fragment" 
    05-08 11:48:40.644: W/dalvikvm(27917): threadid=1: thread exiting with uncaught exception (group=0x40fd8468) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): FATAL EXCEPTION: main 
    05-08 11:48:40.654: E/AndroidRuntime(27917): java.lang.RuntimeException: Unable to start activity ComponentInfo{air.GoogleMapsApp.debug/com.trasys.googlemaps.WebViewActivity}: java.lang.RuntimeException: Attempting to create multiple DataRequestDispatchers 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.ActivityThread.access$600(ActivityThread.java:151) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.os.Handler.dispatchMessage(Handler.java:99) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.os.Looper.loop(Looper.java:155) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.ActivityThread.main(ActivityThread.java:5454) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at java.lang.reflect.Method.invokeNative(Native Method) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at java.lang.reflect.Method.invoke(Method.java:511) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at dalvik.system.NativeStart.main(Native Method) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): Caused by: java.lang.RuntimeException: Attempting to create multiple DataRequestDispatchers 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.ak.n.b(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.ak.n.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.ak.h.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.af.w.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.z.ab.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.z.ab.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.z.ag.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.z.ag.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.z.bw.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at maps.z.r.onCreateView(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.google.android.gms.maps.internal.IMapFragmentDelegate$Stub.onTransact(IMapFragmentDelegate.java:107) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.os.Binder.transact(Binder.java:326) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.google.android.gms.maps.MapFragment$b.onCreateView(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.google.android.gms.internal.e$4.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.google.android.gms.internal.e.a(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.google.android.gms.internal.e.onCreateView(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at com.google.android.gms.maps.MapFragment.onCreateView(Unknown Source) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:809) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1037) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1019) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1804) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.Activity.performCreate(Activity.java:5069) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1101) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
    05-08 11:48:40.654: E/AndroidRuntime(27917): ... 11 more 

我敢確信AIR和Android之間的通信是確定的,所以我只張貼我的本地代碼。 (當我取出地圖,本機擴展沒有問題的作品)

這裏是佈局的xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 

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

這裏是我的FREFunction

public class GoogleMapsFunction implements FREFunction { 

@Override 
public FREObject call(FREContext ctx, FREObject[] passedArgs) { 
    int layoutID, googleMapID; 
    Intent i = new Intent(ctx.getActivity(), WebViewActivity.class); 

    layoutID = ctx.getResourceId("layout.activity_google_maps"); 
    googleMapID = ctx.getResourceId("id.map"); 

    i.putExtra("layoutID", layoutID); 
    i.putExtra("googleMapID", googleMapID); 

    ctx.getActivity().startActivity(i); 
    return null; 
    } 
} 

這裏是我的活動

public class WebViewActivity extends Activity { 
    private GoogleMap map; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     try { 
      int layoutID = getIntent().getIntExtra("layoutID", -1); 
      setContentView(layoutID); 
      int googleMapID = getIntent().getIntExtra("googleMapID", -1); 
      map = ((MapFragment) getFragmentManager().findFragmentById(googleMapID)) 
        .getMap(); 
     } catch(Exception e){ 
      System.out.printf("WebViewActivity.onCreate failed with error:\n\"%s\"\n", 
         e.toString()); 
      Toast.makeText(this, "WebViewActivity.onCreate failed: " + 
        e.toString(), Toast.LENGTH_SHORT).show();    
     } 
    } 
} 

這是我的AndroidManifest

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

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

    <permission android:name="com.example.helloworld.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.example.helloworld.permission.C2D_MESSAGE" /> 

    <permission android:name="com.example.helloworld.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> 
    <uses-permission android:name="com.example.helloworld.permission.MAPS_RECEIVE"/> 

    <!-- App receives GCM messages. --> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <!-- GCM connects to Google Services. --> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!-- GCM requires a Google account. --> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <!-- Keeps the processor from sleeping when a message is received. --> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 


    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
    <!-- 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:icon="@drawable/ic_launcher" 
     android:label="@string/app_name"> 
     <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="MyApiKey"/> 
    </application> 

</manifest> 

我看到一些com.google.android.gms。條目堆棧跟蹤,所以我假設所有的谷歌庫加載正確。

我爲測試目的創建了一個單獨的純本機android應用程序。 在這個應用程序中,我設法創建了一個顯示地圖的活動,這個活動使用相同的佈局XML,相同的谷歌庫和相同的API密鑰。

任何想法的?

回答

0

您需要在jar文件中包含第三方類,這就是爲什麼沒有找到片段類「錯誤膨脹類片段」

在導出你的java文件後,用任何壓縮工具(如7-zip)打開jar文件,瀏覽到com文件夾並從第三方jar文件複製軟件包(以同樣的方式打開它)。之後,您需要重新創建ane文件。