Android 4.3 - веб-страница загрузки с JavaScript, нулевым указателем
У меня есть исключение нулевого указателя при использовании webView с Android 4.3, сегмент кода выглядит следующим образом:
public WebView webview
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
// get data from previous activity
getAllDataFromPreviousActivity();
loadingDialog = ProgressDialog.show(this, "", "loading page...");
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(this), "Html");
// construct url
this.modifiedUrl = constructURL();
webView.loadUrl(modifiedUrl);
webView.setWebViewClient(new WebViewClient() {
// ignore SSL error
public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
handler.proceed();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
loadingDialog.show();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
// check title to determine which view should be displayed
@Override
public void onPageFinished(WebView view, String url) {
/* To check whether webView reached Authorization code page */
loadingDialog.dismiss();
if (view.getTitle().equals("XXXX")) {
RelativeLayout ealLogin = (RelativeLayout) findViewById(R.id.login_view);
ealLogin.setVisibility(View.VISIBLE);
}
});
Я использую webClient для отслеживания заголовка страницы, когда заголовок XXXX, я сделаю вид входа в систему видимым и предложу пользователю выполнить некоторые действия при входе в систему. ("modifyUrl", который загружает webView, является веб-страницей https с встроенным в исходный код javascript)
Приложение работает как шарм на эмуляторе Android 4.4. Тем не менее, когда я тестирую его на моем фактическом устройстве Samsung S3 (Android 4.3), он вызывает исключение нулевого указателя в методе OnPageFinish(). Это показывает, что view.getTitle() будет нулевым, потому что здесь само представление является нулевым. Я знаю, что, скорее всего, это некоторые проблемы с загрузкой веб-страницы с помощью JavaScript в Android 4.3. Есть ли способ решить эту проблему без обновления до Android 4.4? Или есть способ погулять? Спасибо за любую помощь!
Отредактировано: activity_webView.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout
android:id="@+id/login_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:orientation="vertical" >
<EditText
android:id="@+id/webseal_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView2"
android:layout_alignBottom="@+id/textView2"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@+id/textView2"
android:ems="10"
android:hint="username" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/webseal_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/access_token_in_settings"
android:layout_alignLeft="@+id/webseal_username"
android:ems="10"
android:inputType="textPassword" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginLeft="30dp"
android:layout_marginTop="52dp"
android:text="@string/Username"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_alignParentTop="true"
android:layout_marginTop="43dp"
android:text="@string/WebSEALLogin"
android:textSize="@dimen/title_text_size" />
<TextView
android:id="@+id/access_token_in_settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/webseal_username"
android:layout_marginTop="35dp"
android:text="@string/Password"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/webseal_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/webseal_password"
android:layout_marginRight="18dp"
android:layout_marginTop="37dp"
android:text="@string/Login"
android:onClick="webSEALButtonPressed"
/>
</RelativeLayout>
<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</WebView>
</LinearLayout>
мой журнал:
05-26 14: 46: 21.070: E /AndroidRuntime(29717): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной 05-26 14:46:21.070: E/AndroidRuntime(29717): java.lang.NullPointerException
05-26 14:46:21.070: Е /AndroidRuntime(29717):
на com.example.ui.WebViewActivity$1.onPageFinished(WebViewActivity.java:120)
05-26 14:46:21.070: E/AndroidRuntime(29717):
на android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:416)
05-26 14:46:21.070: E/AndroidRuntime(29717):
на android.os.Handler.dispatchMessage(Handler.java:99)
05-26 14:46:21.070: E/AndroidRuntime(29717):
на android.os.Looper.loop (Looper.java:176) 05-26 14: 46: 21.070: E /AndroidRuntime(29717):
atroid.app.ActivityThread.main(ActivityThread.java:5419)
05–26 14: 46: 21.070: E /AndroidRuntime(29717):
at java.lang.reflect.Method.invokeNative (собственный метод) 05-26 14: 46: 21.070: E /AndroidRuntime(29717):
at java.lang.reflect.Method.invoke (Method.java:525) 05-26 14: 46: 21.070: E /AndroidRuntime(29717):
в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
05-26 14:46:21.070: E/AndroidRuntime(29717):
в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
05-26 14:46:21.070: E/AndroidRuntime(29717):
в dalvik.system.NativeStart.main(собственный метод)