0

我曾使用 phonegap 编写一个应用程序,该应用程序试图从 android 2.3.3 环境中的 java 脚本调用 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>
4

1 回答 1

1

已经发现了。这个问题只发生在安卓模拟器上。它在带有 android 2.3.4 和 4.0.3 的设备上运行良好。

于 2012-08-05T04:19:18.417 回答