3

对于有经验的安卓程序员来说,这应该很容易。不幸的是,我对android sdk一无所知。我正在使用 PhoneGap 打包一个 Web 应用程序,我需要覆盖 cordovaExample.java 中的 WebSettings(现在我正在使用 cordovaExample 作为我的应用程序的模板)。我的代码如下所示:

package org.apache.cordova.example;

import android.app.Activity;
import android.os.Bundle;
import org.apache.cordova.*;

public class cordovaExample extends DroidGap
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        this.appView.getSettings().setUseWideViewPort(true);
        this.appView.getSettings().setLoadWithOverviewMode(true);
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
    }
}

我可以ant debug install毫无问题地运行,但是当我在模拟器中启动应用程序时,会出现以下错误:

E/AndroidRuntime(  549): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.apache.cordova.example/org.apache.cordova.example.cordovaExample}: java.lang.NullPointerException
E/AndroidRuntime(  549):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
E/AndroidRuntime(  549):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
E/AndroidRuntime(  549):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
E/AndroidRuntime(  549):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
E/AndroidRuntime(  549):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  549):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(  549):    at android.app.ActivityThread.main(ActivityThread.java:4424)
E/AndroidRuntime(  549):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  549):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(  549):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(  549):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(  549):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  549): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  549):    at org.apache.cordova.example.cordovaExample.onCreate(cordovaExample.java:12)
E/AndroidRuntime(  549):    at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime(  549):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E/AndroidRuntime(  549):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
E/AndroidRuntime(  549):    ... 11 more
W/ActivityManager(   78):   Force finishing activity org.apache.cordova.example/.cordovaExample

无论我为 android sdk 2.1 还是 4.3(在 Mac OS X Lion 上)打包,都会出现错误。

任何帮助将不胜感激。

4

3 回答 3

2

appView为空...super.onCreate(savedInstanceState);先调用

于 2012-04-06T19:49:24.877 回答
2

该错误表明第 12 行有 NullPointerException:

this.appView.getSettings().setUseWideViewPort(true);

要么 this.appView 为 null,要么 appView.getSettings() 返回 null。添加空值检查并查看它是哪一个。一旦你知道它是哪一个,就会更容易找出为什么会有一个空值。

此外,与问题无关,不确定是否是拼写错误,但您的班级名称是驼峰式的。这样做是违反最佳做法的。将来这样做会使您感到困惑,因为驼峰式命名法仅与实例变量、成员和方法一起使用。类名总是首字母大写,包名总是小写。所以应该是

CordovaExample

并不是

cordovaExample
于 2012-04-06T19:49:39.783 回答
2

当您希望浏览器将视口缩放到设备宽度时,无论设备的像素宽度如何,这都是我的解决方案:

在 super.loadURL(...) 之后添加这些行:

super.appView.getSettings().setLoadWithOverviewMode(true);
super.appView.getSettings().setUseWideViewPort(true);

...结合允许缩放的元视口属性。

于 2013-08-27T11:01:11.710 回答