2012-08-04 51 views
0

我曾使用phonegap编写一个应用程序,尝试从android 2.3.3环境中的java脚本调用java函数。VM使用phonegap api从js调用java函数时发生崩溃

我的问题是应用程序,显示警报消息,然后崩溃,并提示以下

08-04 11:06:12.669: W/dalvikvm(551): JNI WARNING: jarray 0x40522898 points to non-array object (Ljava/lang/String;) 
    08-04 11:06:12.669: I/dalvikvm(551): "WebViewCoreThread" prio=5 tid=9 NATIVE 
    08-04 11:06:12.669: I/dalvikvm(551): | group="main" sCount=0 dsCount=0 obj=0x4051dd20 self=0x2a6d88 
    08-04 11:06:12.669: I/dalvikvm(551): | sysTid=559 nice=0 sched=0/0 cgrp=default handle=2780864 
    08-04 11:06:12.669: I/dalvikvm(551): | schedstat=(943171212 746714576 110) 
    08-04 11:06:12.680: I/dalvikvm(551): at android.webkit.WebViewCore.nativeTouchUp(Native Method) 
    08-04 11:06:12.680: I/dalvikvm(551): at android.webkit.WebViewCore.nativeTouchUp(Native Method) 
    08-04 11:06:12.680: I/dalvikvm(551): at android.webkit.WebViewCore.access$3300(WebViewCore.java:53) 
    08-04 11:06:12.680: I/dalvikvm(551): at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1158) 
    08-04 11:06:12.680: I/dalvikvm(551): at android.os.Handler.dispatchMessage(Handler.java:99) 
    08-04 11:06:12.680: I/dalvikvm(551): at android.os.Looper.loop(Looper.java:123) 
    08-04 11:06:12.680: I/dalvikvm(551): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:629) 
    08-04 11:06:12.680: I/dalvikvm(551): at java.lang.Thread.run(Thread.java:1019) 
    08-04 11:06:12.680: E/dalvikvm(551): VM aborting 

谁能帮助/咨询的错误消息在这个问题上?

下面是代码

MainActivity.java 

     import org.apache.cordova.*; 

     import android.os.Bundle; 
     import android.app.Activity; 
     import android.view.Menu; 
     import android.view.MenuItem; 
     import android.support.v4.app.NavUtils; 

     public class MainActivity extends DroidGap { 
      private MyClass mc; 

      @Override 
      public void onCreate(Bundle savedInstanceState) {  

       super.onCreate(savedInstanceState); 
       super.init(); 
       mc = new MyClass(this, appView); 
       appView.addJavascriptInterface(mc, "MyCls");  
       super.loadUrl("file:///android_asset/www/5.html"); 
      } 

     } 


    MyClass.java 

     import org.apache.cordova.DroidGap; 

     import android.content.Context; 
     import android.telephony.TelephonyManager; 
     import android.webkit.WebView; 

     public class MyClass { 
       private WebView mAppView; 
       private DroidGap mGap; 

       public MyClass(DroidGap gap, WebView view) 
       { 
       mAppView = view; 
       mGap = gap; 
       System.out.println("jjjjj"); 
       } 

       public String getTelephoneNumber(){ 
        return "i am android"; 
       } 
      } 

    5.html 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
     <meta charset="UTF-8">  
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
     <script src="jquery.jsonp.js"></script> 
    </head> 

    <script> 
    $(document).ready(function(){ 

     $("#c2").click(function(){ 
      alert('jjjj'); 
      var t = window.MyCls.getTelephoneNumber(); 
      alert(t); 
     }); 
    }); 
    </script> 

    <body> 
    <br><button id="c2">Call Android Activity</button> 
    </body> 
    </html> 

    Manifest: 

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.myfirstapp" 
     android:versionCode="1" 
     android:versionName="1.0" > 

     <uses-sdk 
      android:minSdkVersion="8" 
      android:targetSdkVersion="15" /> 

     <supports-screens 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:smallScreens="true" 
     android:resizeable="true" 
     android:anyDensity="true" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.BROADCAST_STICKY" /> 

     <application 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme" > 
      <activity 
       android:configChanges="orientation|keyboardHidden|screenSize" 
       android:name=".MainActivity" 
       android:label="@string/title_activity_main" > 
       <meta-data 
        android:name="android.support.PARENT_ACTIVITY" 
        android:value="MainActivity" /> 
       <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

      </activity> 
     </application> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    </manifest> 

回答

1

已经发现了。这个问题只发生在android模拟器上。它在Android 2.3.4和4.0.3的设备中工作正常。

相关问题