2013-07-29 24 views
5

Tôi đang đóng gói trang web trên điện thoại di động (qua mạng) trong PhoneGap và muốn chặn một số liên kết nhất định và mở chúng bằng cách sử dụng plugin ChildBrowser. Là nó có thể kích hoạt ChildBrowser từ mã gốc (Tôi đã xác định mà liên kết để đánh chặn)PhoneGap/Android, mở ChildBrowser từ .shouldOverrideUrlLoading()

Tôi đã thử bên dưới mã nhưng nó kết quả trong NullPointerException:

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

Ngoại lệ chi tiết:

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

đâu là ngoại lệ của bạn? Bạn có thể đăng logcat của bạn? – caiocpricci2

+0

@ caiocpricci2 đã thêm logcat – wakeup

+0

Có gì trên dòng 127 trên ChildBrowser.java? Bạn đang sử dụng phiên bản plugin nào? Nếu bạn thử sử dụng mã tôi đã đăng dưới đây, bạn cũng có ngoại lệ không? – caiocpricci2

Trả lời

1

Vào cuối bên dưới đang làm việc cho tôi ...

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

Nếu không có logcat của bạn thật khó để cung cấp cho bạn lời khuyên thêm bằng cách sử dụng plugin nhưng nếu bạn đang gọi openExternal từ lớp gốc không có lý do gì để sử dụng plugin. Nếu bạn nhìn vào the source code, bạn sẽ thấy tất cả những gì cần làm là lấy url của bạn và tải nó trong một trang DroidGap mới.

Nếu bạn chỉ lấy phần thiết yếu, nó có thể giúp theo dõi nơi xảy ra ngoại lệ.

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

Bạn đang nhận được một ngoại lệ null trên biến ngữ cảnh. Tôi không biết tại sao nó là null tại thời điểm đó nhưng bạn có thể dễ dàng sửa chữa mà sửa đổi các phương pháp và đi qua bối cảnh hiện tại. Thay thế this.cordova bằng ngữ cảnh và bạn nên ổn. Gọi điện thoại này từ hoạt động của bạn đang vi phạm this làm thông số cuối cùng (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); 
    } 

Ngoài ra để ngăn chặn các lỗi từ các cuộc gọi khác đến chức năng tiện ích này một phương pháp khác với các thông số ban đầu:

public String openExternal(String url, boolean usePhoneGap) { 
    openExternal(url,usePhoneGap,this.cordova.getActivity()); 
} 
Các vấn đề liên quan