3

これは、経験豊富なAndroidプログラマーにとっては本当に簡単なはずです。残念ながら、私はandroidsdkについて何も知りません。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

appViewnull です ...super.onCreate(savedInstanceState);最初に呼び出します

于 2012-04-06T19:49:24.877 に答える
2

これは、デバイスのピクセル幅に関係なく、ブラウザーでビューポートをデバイスの幅に合わせてスケーリングする場合の解決策です。

super.loadURL(...) の後に次の行を追加します。

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

...スケーリングを可能にするメタビューポート属性と組み合わせて。

于 2013-08-27T11:01:11.710 に答える
2

このエラーは、12 行目に NullPointerException があることを示しています。

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

this.appView が null の appView.getSettings() が null を返すかのどちらかです。null 値チェックを追加して、それがどれであるかを確認します。null 値が何であるかがわかれば、そこに null 値がある理由を簡単に見つけることができます。

また、問題とは関係なく、タイプミスかどうかはわかりませんが、クラス名はキャメルケースです。それを行うことはベストプラクティスに反します。キャメルケースの命名法はインスタンス変数、メンバー、およびメソッドでのみ使用されるため、将来それを行うと混乱するでしょう。クラス名は常に頭文字が大文字で、パッケージ名は常に小文字です。だからそうあるべきだ

CordovaExample

ではない

cordovaExample
于 2012-04-06T19:49:39.783 に答える