2013-07-29 5 views
5

Imballaggio un sito Web mobile (sulla rete) in PhoneGap e desidero intercettare determinati collegamenti e aprirli utilizzando il plug-in ChildBrowser. E 'possibile attivare ChildBrowser da codice nativo (ho già deciso che collega ad intercettare)PhoneGap/Android, aprire ChildBrowser da .shouldOverrideUrlLoading()

ho provato sotto codice, ma il risultato e' NullPointerException:

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

Dettagli eccezione:

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

Dove è la tua eccezione? Puoi pubblicare il tuo logcat? – caiocpricci2

+0

@ caiocpricci2 aggiunto logcat – wakeup

+0

Cosa c'è sulla linea 127 su ChildBrowser.java? Quale versione del plugin stai usando? Se provi a usare il codice che ho postato qui sotto, ottieni un'eccezione? – caiocpricci2

risposta

1

Alla fine sottostante Codice lavorato per me ...

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

Senza il tuo logcat è difficile dare ulteriori consigli usando il plugin ma se chiami openExternal dal livello nativo non c'è motivo di usare il plugin. Se dai uno sguardo allo the source code vedrai che tutto ciò che fa è prendere l'url e caricarlo in una nuova pagina DroidGap.

Se si prende solo la parte essenziale potrebbe aiutare a rintracciare dove sta accadendo l'eccezione.

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

Stai diventando un'eccezione nulla sulla variabile di contesto. Non so perché sia ​​nullo al momento, ma puoi facilmente correggerlo modificando il metodo e passando il contesto corrente. Sostituisci this.cordova con il contesto e dovresti stare bene. Chiamalo dalla tua attività prima del this come ultimo parametro (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); 
    } 

anche a prevenire errori da altre chiamate a questa funzione si aggiungono un altro metodo con i parametri originali:

public String openExternal(String url, boolean usePhoneGap) { 
    openExternal(url,usePhoneGap,this.cordova.getActivity()); 
}