2010-12-03 9 views
1

Die Idee ist, wenn keine Internetverbindung verfügbar ist, zeigen Sie meinen benutzerdefinierten Dialog für Benutzer, die anzeigt, dass keine Verbindung besteht. Wenn die Seite in WebView geladen wird, zeigen Sie andernfalls einen ProgressDialog an, um anzuzeigen, dass die Seite geladen wird, und wenn der Ladevorgang beendet wird. Wenn es eine Internetverbindung gibt, funktioniert dieser Code, aber wenn es keine gibt, stürzt es ab und ich kann nicht finden, wo der Fehler ist.Fehler beim Überprüfen der Internetverbindung in Android

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(); 

     } 

    } 
} 

Und dies ist das Fehlerprotokoll auch:

error log

+0

Mein Bauch sagt mir, dass 'favicon' in 'OnPageStarted()' null ist, wenn Sie ohne Internetverbindung starten (weil es keine Verbindung zur Website herstellen kann, um das Favicon zu erhalten), aber ich bin mir nicht sicher auf diesem. Könnte auch sein, dass "conStatus" null ist, wenn Sie versuchen, seine Methoden aufzurufen, nehme ich an. Haben Sie versucht, dies in einem Debugger zu durchlaufen? – eldarerathis

Antwort

2

Wenn Sie Fehlermeldungen zu veröffentlichen, sollten Sie uns sagen, welche Zeile der Quelle entspricht.

von Code in einen Texteditor einfügen, glaube ich, Linie 83:

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

Dies legt nahe, dass conStatus null ist und Sie versuchen, ein Verfahren zur nicht vorhandenen Objekt aufzurufen.

Sie sollten zuerst prüfen, ob es nicht null ist.

Verwandte Themen