2013-07-29 77 views
5

我在PhoneGap中封装了一个移动网站(通过网络),并且想要拦截某些链接并使用ChildBrowser插件打开它们。是否有可能从本机代码触发ChildBrowser(我已经确定哪个环节拦截)PhoneGap/Android,从.shouldOverrideUrlLoading()打开ChildBrowser()

我试过下面的代码,但它会导致空指针异常:

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) 
+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

没有你的logcat,使用这个插件很难给你进一步的建议,但是如果你从本地层调用openExternal,没有理由使用插件。如果你看看the source code,你会发现它只是把你的网址加载到一个新的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); 

} 

编辑

扰得上下文变量空例外。我不知道当时为什么它是空的,但你可以很容易地修复修改方法并传递当前上下文。用上下文替换this.cordova,你应该没问题。从您的活动中调用这个作为this的活动作为最后一个参数(ex: childBrowser.openExternal("http://www.google.com", true,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()); 
} 
相关问题