2013-07-29 17 views
5

私はPhoneGapにモバイルウェブサイトを(ネットワーク経由で)パッケージ化しており、特定のリンクを傍受してChildBrowserプラグインを使用して開きたいと考えています。PhoneGap/Android、ChildBrowser from .shouldOverrideUrlLoading()

ChildBrowser childBrowser = new ChildBrowser(); 
childBrowser.openExternal(url, true); 

例外の詳細を:

07-29 10:49:52.632  947-947/com.abc.androidTablet E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.NullPointerException 
at com.phonegap.plugins.childBrowser.ChildBrowser.openExternal(ChildBrowser.java:127) 
at com.mygola.androidTablet.abc_android$1.shouldOverrideUrlLoading(abc_android.java:96) 
at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:270) 
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:372) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 
それは

は、私は、コードの下に試してみたが、それはNullPointerExceptionが、その結果

(私はすでに遮るようにリンクされ決定されました)ネイティブコードからChildBrowserをトリガすることが可能です

+0

あなたの例外ですか?あなたはlogcatを投稿できますか? – caiocpricci2

+0

@ caiocpricci2 added logcat – wakeup

+0

ChildBrowser.javaの127行目は何ですか?どのバージョンのプラグインを使用していますか?あなたが以下に掲示したコードを使用しようとすると例外も出ますか? – caiocpricci2

答えて

1

コード下の終わりには、私のために働いた...

ChildBrowser childBrowser = new ChildBrowser(); 
childBrowser.cordova = this; 
childBrowser.showWebPage(url, null); 
1

プラグインを使用してさらに詳しいアドバイスを提供するのは難しいですが、openExternalをネイティブレイヤーから呼び出す場合は、プラグインを使用する理由はありません。 the source codeをご覧になると、あなたのURLを受け取り、新しいDroidGapページにロードすることだけが表示されます。

重要な部分のみを使用すると、例外が発生している場所を特定するのに役立ちます。

function void openExternalUrl() { 

    intent = new Intent().setClass(this.ctx.getContext(), org.apache.cordova.DroidGap.class); 
    intent.setData(Uri.parse(url)); // This line will be removed in future. 
    intent.putExtra("url", url); 
    this.ctx.startActivity(intent); 

} 

EDIT

あなたはコンテキスト変数にはnull例外を取得しています。私は当時なぜそれがnullであるのかはわかりませんが、メソッドを変更して現在のコンテキストを渡すことを簡単に修正できます。文脈にthis.cordovaを置き換えて、あなたは上手くいくはずです。あなたの活動から最後のパラメータ(ex: childBrowser.openExternal("http://www.google.com", true,this))としてthisを呼び出してください。また、元のパラメータで別のメソッドを追加し、この関数に他の呼び出しからエラーを防止するために

public String openExternal(String url, boolean usePhoneGap,Context context) { 
    ... 
    intent = new Intent().setClass(context, org.apache.cordova.DroidGap.class); 
    ... 
    context.startActivity(intent); 
    } 

public String openExternal(String url, boolean usePhoneGap) { 
    openExternal(url,usePhoneGap,this.cordova.getActivity()); 
} 
関連する問題