2013-05-06 39 views
7

Tôi thấy đôi khi ngoại lệ con trỏ null trong trình quản lý kết nối. Từ dịch vụ ý định, tôi kiểm tra trạng thái mạng bằng isOnWIFI (điều này). Ngoại lệ xảy ra tại dòng cm.getActiveNetworkInfo(). Thật kỳ lạ vì tôi kiểm tra null trước khi tôi gọi nó. Lưu ý: Quyền được đặt.Khả năng kết nốiQuản lý getActiveNetworkInfo ngoại lệ con trỏ null

public static boolean isOnWIFI(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     return cm != null 
       //here occurs NullPointerException 
       && cm.getActiveNetworkInfo() != null 
       && ((cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && cm.getNetworkInfo(
         ConnectivityManager.TYPE_WIFI).isConnected())); 

} 

Mọi suy nghĩ tại sao điều này xảy ra? Tôi không thể gỡ lỗi nó bởi vì nó chỉ thỉnh thoảng từ các báo cáo lỗi. Chỉ có giải pháp tôi thấy là đặt nó vào thử khối catch. Cảm ơn.

+0

những điều khoản được thiết lập? –

+0

vandzi

+0

Tôi không chắc chắn nhưng bạn có thể kiểm tra bằng cách thêm một quyền nữa android.permission.ACCESS_WIFI_STATE –

Trả lời

2
Try this. Read more here 

http://developer.android.com/training/basics/network-ops/managing.html

public static boolean isOnWIFI(Context context) { 

ConnectivityManager cm = (ConnectivityManager) this.getSystemService(context.CONNECTIVITY_SERVICE); 

if(cm != null){ 

    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 

    boolean isWiFi = networkInfo.getType() == ConnectivityManager.TYPE_WIFI; 

    // if user is connected to network 
    if (isWifi) { 
     return true; 

    }else { 
    return false; 

    } 

} 
else{ 
    //cm is null 
    return false 

} 
} 
+0

Tôi không thấy sự khác biệt. Tôi cũng kiểm tra cm! = Null và sau đó tôi nhận được ngoại lệ con trỏ null.getActiveNetworkInfo null. Như tôi đã nói, thỉnh thoảng nó chỉ là – vandzi

+0

@vandzi: bạn đã sửa mã chưa? Từ hoạt động của bạn, bạn đang gọi phương thức này ở đâu? Ngữ cảnh của bạn là null như xa như tôi đoán vì không có vấn đề trong mã. –

+0

@haris Có thể kết nốiQuản lý bao giờ bị vô hiệu không? Chúng ta có cần kiểm tra cm! = Null không? Những trường hợp nào có thể là null? –

-1

Tôi chỉ cần thực hiện một mẫu với loại vấn đề, bây giờ nó hoạt động tốt. Bạn có thể thử mã này, tôi đã thử trên nhiều thiết bị và không có vấn đề gì. getActiveNetworkInfo() problem. Trước khi tôi thử getAllNetworkInfo() và tôi không hiểu những gì là sai, nhưng getAllNetworkInfo() đang làm việc ngu ngốc trên một số thiết bị.

+0

Đăng mã có liên quan. –

+0

ConnectivityManager cm = (ConnectivityManager) c.getSystemService (Context.CONNECTIVITY_SERVICE); NetworkInfo [] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo nix: netInfo) { \t \t \t if (nix.getType() == ConnectivityManager.TYPE_MOBILE) \t \t \t \t if (nix.isConnected()) { \t \t \t \t \t isAnyNetworkAvailableType = "MOBILE" ; –

+0

Điều này thật điên rồ, khi tôi khởi động thiết bị và internet không hoạt động tốt trên ứng dụng. Khi tôi bật ứng dụng internet vẫn còn tốt nó phát hiện sự thay đổi nhưng nếu tôi bật internet của ứng dụng không nhận ra sự thay đổi. Ứng dụng cũng phát hiện thay đổi khi bạn bật nhưng không tắt. –

0

Khi tôi đã làm việc với dịch vụ, điều này giải quyết vấn đề của tôi .. Trước khi tôi đã chỉ sử dụng! Info.isConnected() nhưng điều đó là không đủ

ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
     NetworkInfo info = cm.getActiveNetworkInfo(); 

     if(info==null || !info.isConnected()) { 
      stopSelf(); 
      return; 

     } 
5

android_dev là đúng. Sự cố trong mã của bạn xuất phát từ cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()));

Có! bạn kiểm tra cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null trước đây, nhưng bằng cách gọi getNetworkInfo() lần thứ hai, android sẽ tìm nạp thông tin Mạng lần thứ hai, chỉ lần này nó không gặp một mạng đang hoạt động trả lại lần thứ hai này. Có điều là, không phải vì bạn gọi getNetworkInfo() một phần nghìn giây trước và đã không hề nhận được một null, có nghĩa là bạn sẽ không nhận được nó một phần nghìn giây sau

0

getActiveNetworkInfo lợi nhuận null nếu không không có kết nối mặc định sẵn theo các tài liệu >>getActiveNetworkInfo vì vậy, những gì tôi muốn khuyên bạn nên làm là kiểm tra cho các mạng, mỗi cá nhân như sau

NetworkInfo WiFiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

sau đó kiểm tra xem họ có sẵn

if(mobileInfo != null & mobileInfo.isConnectedOrConnecting() || WiFiInfo != null & WiFiInfo.isConnectedOrConnecting()) 
    { 
     //do your task here 
    } 
else { 
    //show an alert dialog or something  
} 
Các vấn đề liên quan