Ошибка при проверке интернет-соединения в Android

1

Идея заключается в отсутствии доступного интернет-соединения, покажите мое пользовательское диалоговое окно для пользователей, которое указывает, что соединение отсутствует. В противном случае, когда страница загружается в WebView, покажите ProgressDialog, чтобы показать, что страница загружается и увольняется при загрузке. Когда есть интернет-соединение, этот код работает, но если его нет, он сбой и я не могу найти, где ошибка.

package com.tariknotebook;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

public class NoteBook extends Activity {
    /** Called when the activity is first created. */
    WebView web;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        web = (WebView) findViewById(R.id.browserMine);
        web.setWebViewClient(new HelloWebViewClient());
        web.getSettings().setJavaScriptEnabled(true);
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        web.loadUrl("http://m.seslisozluk.com");
    }

    ProgressDialog dialog;
    Dialog connDialog;

    @Override
    protected Dialog onCreateDialog(int id) {

        switch(id)
        {
        case 1:
            dialog = ProgressDialog.show(NoteBook.this, "Loading",
            "Loading.. Please wait.");

            break;
        case 2:
                connDialog = new Dialog(getApplicationContext());
                connDialog.setContentView(R.layout.connection);
                connDialog.setTitle("No Internet Connection");

                Button closeButton = (Button) findViewById(R.id.closeButton);
                closeButton.setOnClickListener(new closeButtonOnClickListener());
                connDialog.show();
            break;
        }


        return super.onCreateDialog(id);
    }

    private class closeButtonOnClickListener implements OnClickListener
    {
        public void onClick(View v) {
            connDialog.dismiss();
        };
    }

    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
                ConnectivityManager conStatus = (ConnectivityManager) view.getContext().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
                if(conStatus.getActiveNetworkInfo().isConnected() && conStatus.getActiveNetworkInfo() != null)
                    showDialog(1);
                else
                    showDialog(2);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
            dialog.dismiss();

        }

    }
}

И это также журнал ошибок:

Изображение 174551

  • 0
    Моя интуиция говорит мне, что favicon будет нулевым в OnPageStarted() если вы запустите без подключения к Интернету (потому что он не может подключиться к веб-сайту, чтобы получить значок), но я не уверен в этом. conStatus , conStatus имеет значение null, когда вы пытаетесь вызвать его методы. Вы пытались пройти через это в отладчике?
Теги:
webview

1 ответ

2
Лучший ответ

Когда вы публикуете сообщения об ошибках, вы должны сообщить нам, какая строка источника соответствует.

Вставив код в текстовый редактор, я считаю, что строка 83:

if(conStatus.getActiveNetworkInfo().isConnected() && conStatus.getActiveNetworkInfo() != null)

Это говорит о том, что conStatus имеет значение null, и вы пытаетесь вызвать метод несуществующего объекта.

Сначала вы должны проверить, что он не равен null.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню