Вопрос по android, offline-caching, event-listener – Показать ошибку сети в Android

2

Я создал приложение с веб-просмотром. если у меня есть какое-либо действие, и сеть отключена, я хочу показать одно предупреждение. Я пробовал следующее,

добавил это в методе oncreate.

public class AndroidNetTestActivity extends Activity {

    public static WebView webview;
    private Handler mHandler = new Handler();       
    private boolean isConnected = true;
    final String offlineMessageHtml = "Net is disconnected";
    final String timeoutMessageHtml = "Connection timed out";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webview=(WebView)findViewById(R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true); 
        webview.loadUrl("file:///android_asset/www/index.htm");      
        webview.addJavascriptInterface(new MyJavaScriptInterface(), "Android");
        isConnected=isNetworkAvailable();
        webview.setNetworkAvailable(isConnected);
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                isConnected=isNetworkAvailable();
                if (isConnected) {
                    // return false to let the WebView handle the URL
                    return false;
                } else {
                    // show the proper "not connected" message
                    view.loadData(offlineMessageHtml, "text/html", "utf-8");
                    // return true if the host application wants to leave the current 
                    // WebView and handle the url itself
                    return true;
                }
            }
            @Override
            public void onReceivedError (WebView view, int errorCode, 
                String description, String failingUrl) {
                if (errorCode == ERROR_TIMEOUT) {
                    view.stopLoading();  // may not be needed
                    view.loadData(timeoutMessageHtml, "text/html", "utf-8");
                }
            }
        });
        webview.setWebChromeClient(new WebChromeClient());        
    }

    final class MyJavaScriptInterface
    {
        public void ProcessJavaScript(final String scriptname, final String args)
            {             
                mHandler.post(new Runnable()
                    {
                        public void run()
                            {
                                //ToDo
                            }
                    });
            }
    }  

    public boolean isNetworkAvailable() {
           Context context = getApplicationContext();
           ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
           if (connectivity == null) {
              //boitealerte(this.getString(R.string.alert),"getSystemService rend null");
           } else {
              NetworkInfo[] info = connectivity.getAllNetworkInfo();
              if (info != null) {
                 for (int i = 0; i < info.length; i++) {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                       return true;
                    }
                 }
              }
           }
           return false;
        }
}

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

Но это не работает. пожалуйста, проверьте мой код и скажите, что я сделал не так

Посмотрите на ваш метод isNetworkAvailable (), я немного изменил его, просто попробуйте Chintan Raghwani
это сбой? Vipul Shah
нет, ничего не случилось символ загрузки отображается Ponmalar
проверьте мой полный код Ponmalar
введите свой полный код Vipul Shah

Ваш Ответ

2   ответа
0

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;


public class AndroidNetTestActivity extends Activity {

    public static WebView webview;
    private Handler mHandler = new Handler();       
    private boolean isConnected = true;
    final String offlineMessageHtml = "Net is disconnected";
    final String timeoutMessageHtml = "Connection timed out";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.full_screen_image_layout);

        webview=(WebView)findViewById(R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true); 
        webview.loadUrl("http://www.google.com");      
        webview.addJavascriptInterface(new MyJavaScriptInterface(), "Android");
        isConnected=isNetworkAvailable();
        webview.setNetworkAvailable(isConnected);
        webview.setWebViewClient(new WebViewClient() {
            /* (non-Javadoc)
            * @see android.webkit.WebViewClient#onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap)
            */
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                System.out.println("page loading started");
                // TODO Auto-generated method stub
                if(!isNetworkAvailable2())
                {
                    showInfoMessageDialog("network not available");
                    System.out.println("network not available");
                    return;
                }
                else System.out.println("network available");

                super.onPageStarted(view, url, favicon);

            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                isConnected=isNetworkAvailable2();
                if (isConnected) {
                    // return false to let the WebView handle the URL
                    return false;
                } else {
                    // show the proper "not connected" message
                // view.loadData(offlineMessageHtml, "text/html", "utf-8");
                    // return true if the host application wants to leave the current 
                    // WebView and handle the url itself
                    return true;
                }
            }
            @Override
            public void onReceivedError (WebView view, int errorCode, 
                String description, String failingUrl) {
                if (errorCode == ERROR_TIMEOUT) {
                    view.stopLoading();  // may not be needed
                // view.loadData(timeoutMessageHtml, "text/html", "utf-8");
                }
            }
        });
        //webview.setWebChromeClient(new WebChromeClient());        
    }

    final class MyJavaScriptInterface
    {
        public void ProcessJavaScript(final String scriptname, final String args)
            {             
                mHandler.post(new Runnable()
                    {
                        public void run()
                            {
                                //ToDo
                            }
                    });
            }
    }  

    private void showInfoMessageDialog(String meaasge)
    {
        AlertDialog alertDialog = new AlertDialog.Builder(
                AndroidNetTestActivity.this).create();
        alertDialog.setTitle("Connectivity");
        alertDialog.setMessage(meaasge);
        alertDialog.setButton("OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                            int which) {
                        dialog.cancel();
                    }
                });
        //alertDialog.setIcon(R.drawable.error);
        alertDialog.show();
    }

    private boolean isNetworkAvailable2()
    {
        System.out.println("isNetworkAvailable2 called");
        NetworkInfo info = (NetworkInfo) ((ConnectivityManager) getApplicationContext()
                .getSystemService(Context.CONNECTIVITY_SERVICE))
                .getActiveNetworkInfo();

        if (info == null || !info.isAvailable() || !info.isConnected())
            return false;
        else return true;
    }


    public boolean isNetworkAvailable() {
        Context context = getApplicationContext();
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity == null) {
            //boitealerte(this.getString(R.string.alert),"getSystemService rend null");
        } else {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                    }
                }
            }
        }
        return false;
        }
}
хорошо ... отредактировал код
да, вы прекрасно, что работает и отображает сообщение об ошибке подключения нормально. Но страница показывает & quot; Веб-страница недоступна & quot; когда нет сетевого соединения. Я хочу быть на той же странице. Ты знаешь как это сделать? Ponmalar
я нашел ответ "webview.stoploading ();" добавлено, если нет соединения с сетью. Огромное спасибо. Ponmalar
я могу получить статус соединения с моим кодом, но этот метод не вызывается при нажатии на кнопку Ponmalar
3

 boolean check=checkConnection();

    if(check==true){
Toast.makeText(
                    this,
                    "Internet is Connected",
                    Toast.LENGTH_LONG).show();
    }

    else{


Toast.makeText(
                    this,
                    "Failed to connect to internet.",
                    Toast.LENGTH_LONG).show();
    }




and here is  a method of checkConnection




  protected boolean checkConnection(){ 
        ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo networkInfo = conMan.getActiveNetworkInfo();

        final boolean connected = networkInfo != null
                && networkInfo.isAvailable()
                && networkInfo.isConnected();

        if ( !connected) {
            Toast.makeText(
                    this,
                    "Failed to connect to internet.",
                    Toast.LENGTH_LONG).show();
            return false;
        }
        return true;
    }

Просто сделай так, это работает на меня

Посмотрите в веб-представлении, мы можем загрузить любой URL-адрес, если мы нажмем на URL-адрес, он может перейти к любым URL-адресам, в то время, если нет сетевого подключения, то хотите отправить сообщение об ошибке Ponmalar
y метод не может вызвать событие нажатия кнопки - просто вызовите этот метод boolean check = checkConnection (); в случае нажатия кнопки вы легко сможете проверить соединение
хорошо, посмотрите на эту проблемуstackoverflow.com/questions/6392318/…
где я должен проверить соединение, которое я прошу не проверять соединение Ponmalar

Похожие вопросы