Получение исключения NULL Pointer в классе для проверки интернета - PullRequest
1 голос
/ 16 декабря 2011

Я создаю класс для проверки интернет-соединения, я получаю сообщение об ошибке ниже:

 12-16 10:34:07.340: E/AndroidRuntime(1099):

java.lang.NullPointerException 12-16 10: 34: 07.340: E / AndroidRuntime (1099): на com.internetchecker.main.InternetCheckerActivity $ 1.onClick (InternetCheckerActivity.java:25) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): на android.view.View.performClick (View.java:2485) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): на android.view.View $ PerformClick.run (View.java:9080) 12-16 10: 34: 07.340: E / AndroidRuntime (1099):в android.os.Handler.handleCallback (Handler.java:587) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): в android.os.Handler.dispatchMessage (Handler.java:92) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): на android.os.Looper.loop (Looper.java:123) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): на android.app.ActivityThread.main (ActivityThread.java:3683) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): по адресу java.lang.reflect.Method.invokeNative (собственный метод) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): в java.lang.reflect.Method.invoke (Method.java:507) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:839) 12-16 10: 34: 07.340: E / AndroidRuntime (1099): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:597) 12-16 10:34: 07.340: E / AndroidRuntime (1099): at dalvik.system.NativeStart.main (собственный метод)

Код моего класса приведен ниже:

public class CheckInternet2 {
private static Boolean status =  true;
public static Boolean isConnected() {
    Runnable runnable = new Runnable() {
        public void run() {
            // TODO Auto-generated method stub
            isNetworkAvailable(h,2000);             
        }           
    };
    runnable.run();
    return status;
}
private static Handler h = new Handler() {

    @Override
    public void handleMessage(Message msg) {

        if (msg.what != 1) { // code if not connected
            status = false;
            System.out.println("Status False");
        } else { // code if connected
            status = true;
            System.out.println("Status True");
        }
    }
};

private static  void isNetworkAvailable(final Handler handler, final int timeout) {

    new Thread() {

        private boolean responded = false;
        @Override
        public void run() {

            new Thread() {
                @Override
                public void run() {
                    HttpGet requestForTest = new HttpGet("http://m.google.com");
                    try {
                        new DefaultHttpClient().execute(requestForTest); // can last...
                        responded = true;
                    } catch (Exception e) {}
                }
            }.start();
            try {
                int waited = 0;
                while(!responded && (waited < timeout)) {
                    sleep(100);
                    if(!responded ) { 
                        waited += 100;
                    }
                }
            } 
            catch(InterruptedException e) {} // do nothing 
            finally { 
                if (!responded) { handler.sendEmptyMessage(0);
                } 
                else { handler.sendEmptyMessage(1); 
                }
            }
        }
    }.start();
}
}

и яя называю это так:

btnCheckStatus.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                if(CheckInternet2.isConnected())
                {
                    Toast.makeText(getApplicationContext(), "Connected ", 0).show();
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "Not Connected ", 0).show();
                }


            }
        });

Я не могу понять, почему это исключение.

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

проверка доступности сети вместе со статусом wifi

Для проверки доступности сети

public static boolean isNetworkPresent(Context context) {
        boolean isNetworkAvailable = false;
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        try {

            if (cm != null) {
                NetworkInfo netInfo = cm.getActiveNetworkInfo();
                if (netInfo != null) {
                    isNetworkAvailable = netInfo.isConnectedOrConnecting();
                }
            }
        } catch (Exception ex) {
            Log.e("Network Avail Error", ex.getMessage());
        }
        //check for wifi also
        if(!isNetworkAvailable){
            WifiManager connec = (WifiManager) context
                    .getSystemService(Context.WIFI_SERVICE);
            State wifi = cm.getNetworkInfo(1).getState();
            if (connec.isWifiEnabled()
                    && wifi.toString().equalsIgnoreCase("CONNECTED")) {
                isNetworkAvailable = true;
            } else {

                isNetworkAvailable = false;
            }

        }
        return isNetworkAvailable;
    }
0 голосов
/ 16 декабря 2011

Это прекрасно работает в моем коде:

    public boolean isOnline(Context cxt) {

    try{

        ConnectivityManager conMan = (ConnectivityManager)cxt.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = conMan.getActiveNetworkInfo();
        Log.d(Log_Tag,networkInfo.getState().toString());
        if(networkInfo.isConnected()){
          Log.d(Log_Tag,networkInfo.toString());
            return true;
        } 
        else {
            return false;
        }
    }
    catch(Exception ex)
    {
        Log.i(Log_Tag, "isOnline ERROR: "+ex.toString());
        return false;
    }

}

Я пытался с тем, что вы написали в своем вопросе. Я показываю некоторые ошибки. Так что я использовал это.

...