2013-05-06 19 views
7

मैं कनेक्टिविटी प्रबंधक में कभी-कभी शून्य सूचक अपवाद देखता हूं। इरादे से सेवा से मैं ओएनवाईएफआईआई (यह) द्वारा नेटवर्क स्थिति की जांच करता हूं। अपवाद लाइन cm.getActiveNetworkInfo() पर होता है। यह अजीब बात है क्योंकि मैं इसे कॉल करने से पहले शून्य की जांच करता हूं। नोट: अनुमतियां सेट हैं।कनेक्टिविटी मैनेजर getActiveNetworkInfo शून्य सूचक अपवाद

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

} 

कोई विचार ऐसा क्यों होता है? मैं इसे डीबग नहीं कर सकता क्योंकि यह केवल बग रिपोर्ट से कभी-कभी होता है। केवल समाधान जो मैं देखता हूं उसे पकड़ने की कोशिश में डाल देना है। धन्यवाद।

+0

कौन सा अनुमति सेट कर रहे हैं? –

+0

<उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.INTERNET" /> <उपयोग-अनुमति एंड्रॉइड: name = "android.permission.ACCESS_NETWORK_STATE" /> – vandzi

+0

मुझे यकीन नहीं है लेकिन आप एक और अनुमति जोड़ने के साथ जांच सकते हैं android.permission.ACCESS_WIFI_STATE –

उत्तर

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

मुझे अंतर दिखाई नहीं देता है। मैं cm! = Null भी जांचता हूं और फिर मुझे cm.getActiveNetworkInfo शून्य सूचक अपवाद मिलता है। जैसा कि मैंने कहा, यह केवल – vandzi

+0

@vandzi है: क्या आपने कोड डीबग किया है? आपकी गतिविधि से आप इस विधि को कह रहे हैं? जहां तक ​​मैंने अनुमान लगाया है, आपका संदर्भ शून्य है क्योंकि कोड में कोई समस्या नहीं है। –

+0

@haris कनेक्टिविटी प्रबंधक कभी शून्य हो सकता है? क्या हमें वास्तव में सेमी के लिए चेक की आवश्यकता है! = शून्य? यह किस मामले में शून्य हो सकता है? –

6

आपको लगता है कि अगर कोई सक्रिय कनेक्शन वे बस अशक्त लौट रहे हैं मुझे लगता है कि इस उर समस्या यह है कि वे उल्लेख कर रहे हैं में एपीआई की जांच की गई है।

http://developer.android.com/reference/android/net/ConnectivityManager.html #getActiveNetworkInfo()

-1

मैं सिर्फ इस तरह की समस्या के साथ एक टेम्पलेट बनाया है, अब यह अच्छा काम करता है। आप इस कोड को आजमा सकते हैं, मैंने इसे कई उपकरणों पर आजमाया और कोई समस्या नहीं है। getActiveNetworkInfo() problem। इससे पहले कि मैंने getAllNetworkInfo() की कोशिश की और मुझे समझ में नहीं आता कि क्या गलत है लेकिन getAllNetworkInfo() कुछ उपकरणों पर बेवकूफ काम कर रहा है।

+0

प्रासंगिक कोड पोस्ट करें। –

+0

कनेक्टिविटी मैनेजर सेमी = (कनेक्टिविटी मैनेजर) c.getSystemService (Context.CONNECTIVITY_SERVICE); नेटवर्कइन्फो [] netInfo = cm.getAllNetworkInfo(); (NetworkInfo nix: netinfo) के लिए { \t \t \t अगर (nix.getType() == ConnectivityManager.TYPE_MOBILE) \t \t \t \t अगर (nix.isConnected()) { \t \t \t \t \t isAnyNetworkAvailableType = "मोबाइल" ; –

+0

यह पागल है, जब मैं डिवाइस शुरू करता हूं और इंटरनेट एप्लिकेशन पर काम नहीं करता है तो अच्छा काम करता है। जब मैं इंटरनेट एप्लिकेशन चालू करता हूं तब भी यह अच्छा होता है कि यह परिवर्तन का पता लगाता है लेकिन यदि मैं एप्लिकेशन के इंटरनेट को बदलता हूं तो परिवर्तन को पहचान नहीं आता है। जब आप चालू करते हैं लेकिन बंद नहीं होते हैं तो एप्लिकेशन भी परिवर्तन का पता लगाता है। –

0

जब मैं सेवाओं के साथ काम कर रहा था, इस .. मेरी समस्या हल हो जाती इससे पहले कि मैं सिर्फ का उपयोग कर रहा था! Info.isConnected() लेकिन वह पर्याप्त

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

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

     } 
5

android_dev सही है नहीं था। आपके कोड में समस्या cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()));

से है! आप पहले cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null जांचते हैं, लेकिन दूसरी बार getNetworkInfo() पर कॉल करके, एंड्रॉइड दूसरी बार नेटवर्क जानकारी लेता है और प्राप्त करता है, केवल इस बार यह एक सक्रिय नेटवर्क को दूसरी बार वापस लौटने से मुकाबला नहीं करता है। बात है, नहीं है क्योंकि आप getNetworkInfo() कहा जाता है एक millisecond से पहले और फ्लॉप एक अशक्त मिलता है, तो आप

0

getActiveNetworkInfo रिटर्न अशक्त के बाद यह एक millisecond पाने के लिए अगर कोई वहाँ डॉक्स के अनुसार कोई डिफ़ॉल्ट कनेक्शन उपलब्ध नहीं जा रहे हैं इसका मतलब है >>getActiveNetworkInfo मुझे क्या करना आपको सलाह देंगे तो नेटवर्क के लिए चेक, व्यक्तिगत रूप से

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

नीचे के रूप में प्रत्येक फिर जांच अगर वे उपलब्ध हैं है

if(mobileInfo != null & mobileInfo.isConnectedOrConnecting() || WiFiInfo != null & WiFiInfo.isConnectedOrConnecting()) 
    { 
     //do your task here 
    } 
else { 
    //show an alert dialog or something  
} 
संबंधित मुद्दे