4

PhoneGap/Cordova で構築された Android アプリが、自己署名 SSL 証明書を使用してサーバーに AJAX HTTPS リクエストを送信できるようにするために、ここにあるChris が提供する回避策を実装しようとしています。私は PhoneGap/Cordova 2.1.0 を使用していますが、Chris は 1.7.0 を使用していました。問題なく MyWebViewClient クラスを作成できます。ただし、このコード行を追加すると...

this.setWebViewClient(this.appView, new MyWebViewClient(this));

... MainActivity クラスのオーバーライドされた init() メソッドに対して、次のエラーが表示されます。

メソッド setWebViewClient(CordovaWebView, MyWebViewClient) はタイプ MainActivity に対して未定義です

MyWebViewClient.java のコードは次のとおりです。

package [packagename];

import android.net.http.SslError;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import org.apache.cordova.CordovaWebViewClient;
import org.apache.cordova.DroidGap;

public class MyWebViewClient extends CordovaWebViewClient {

    public class MyWebViewClient(DroidGap ctx) {
        super(ctx);
    }

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
    }
}

MainActivity.java のコードは次のとおりです。

package [packagename];

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

public class MainActivity extends DroidGap {

    @Override
    public void init() {
        super.init();
        this.setWebViewClient(this.appView, new MyWebViewClient(this)); // Error occurs here
    }

    @Override
    public void onCreate(bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setBooleanProperty("keeprunning", false);
        super.loadUrl("file:///android_asset/www/index.html");
    }
}

私には十分な評判がありません。そうでなければ、クリスの回答にコメントしただけです。また、私は jQuery ソリューションを探していません (この問題を回避するために $.ajax() 呼び出しを行うことができることは既に知っていますが、jQuery をアプリから除外しようとしています)。

何か案は?あなたの助けは大歓迎です!

編集:返信する前に、以下の私のコメントを参照してください。

4

1 に答える 1

2

これは、後のコルドババージョンで以下のように修正できます(私は2.2を使用しています)。前述のように、失敗しますonPageStarted()。これは、appViewを予期しているためです。appViewはnullであるため、NullPointerExceptionが発生します。appViewを設定すると、修正されるようです。

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

    CordovaWebViewClient webViewClient = new CustomWebViewClient(this);
    webViewClient.setWebView(this.appView);
    this.appView.setWebViewClient(webViewClient);

    super.loadUrl("file:///android_asset/www/index.html");

}

super.init()も必要であることに注意してください

于 2012-11-30T09:33:43.907 に答える