2013-07-29 13 views
5

Pakuję witrynę mobilną (przez sieć) w PhoneGap i chciałbym przechwycić niektóre linki i otworzyć je za pomocą wtyczki ChildBrowser. Czy jest możliwe aby wywołać ChildBrowser z natywnego kodu (ja już ustalona który prowadzi do przechwycenia)PhoneGap/Android, otwórz program ChildBrowser z .shouldOverrideUrlLoading()

Próbowałem poniżej kod, ale to powoduje NullPointerException:

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

wyjątków szczegóły:

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

Gdzie czy to twój wyjątek? Czy możesz opublikować swój logcat? – caiocpricci2

+0

@ caiocpricci2 dodano logcat – wakeup

+0

Co jest w linii 127 na ChildBrowser.java? Którą wersję wtyczki używasz? Jeśli spróbujesz użyć kodu zamieszczonego poniżej, czy otrzymasz również wyjątek? – caiocpricci2

Odpowiedz

1

Pod koniec poniżej kod pracował dla mnie ...

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

Bez swojego logcat trudno jest uzyskać dalsze porady za pomocą wtyczki, ale jeśli dzwonisz pod numer openExternal z warstwy macierzystej, nie ma powodu, aby używać wtyczki. Jeśli spojrzysz na the source code zobaczysz, że wszystko, co trzeba, to wziąć swój adres URL i załadować go na nową stronę DroidGap.

Jeśli podejmiesz tylko istotną część, może pomóc w wyszukaniu wyjątku.

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

Dostaniesz wyjątku null na zmiennej kontekstowego. Nie wiem, dlaczego jest ona null w tym czasie, ale możesz łatwo naprawić to modyfikując metodę i przekazując bieżący kontekst. Zastąp this.cordova kontekstem i powinieneś czuć się dobrze. Wywołaj ten numer ze swojej aktywności podając this jako ostatni parametr (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); 
    } 

także uniknąć błędów z innych połączeń do tej funkcji Dodaj inną metodę z oryginalnymi parametrami:

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