سؤال

لدي نشاط يظهر بعض إدخالات القائمة. عندما أقوم بالنقر فوق عنصر قائمة، يتحقق التطبيق الخاص بي نوع الاتصال المتاح ("WIF" أو "المحمول")، من خلال NetworkInfo.gettypename (). بمجرد استدعاء هذه الطريقة أحصل على nullpointerexception. لماذا ا؟

اختبرت هذا على المحاكي، لأن هاتفي غير متوفر حاليا (مكسور ...). أفترض أن هذه هي المشكلة؟ هذا هو التفسير الوحيد الذي لدي، إذا لم يكن الأمر كذلك، فلن يكون لدي أي فكرة لماذا هذا سيكون فارغا.

إليك بعض القصاصات الكود:

public class VideoList extends ListActivity{
 ...
 public void onCreate(Bundle bundle){
  final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  ...
  listview.setOnItemClickListener(new OnItemClickListener(){
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    ...
    NetworkInfo ni = cm.getActiveNetworkInfo();
    String connex = ni.getTypeName(); //Nullpointer exception here
    if(connex.equals("WIFI")doSomething();
   }
  });
 }
}
هل كانت مفيدة؟

المحلول

الاتصال getActiveNetworkInfo() يمكن إرجاع null إذا لم يكن هناك شبكة نشطة وتحتاج إلى التحقق من ذلك. إليك شفرة المصدر من هنا.

/**
 * Return NetworkInfo for the active (i.e., connected) network interface.
 * It is assumed that at most one network is active at a time. If more
 * than one is active, it is indeterminate which will be returned.
 * @return the info for the active network, or {@code null} if none is active
 */
public NetworkInfo getActiveNetworkInfo() {
    enforceAccessPermission();
    for (NetworkStateTracker t : mNetTrackers) {
        NetworkInfo info = t.getNetworkInfo();
        if (info.isConnected()) {
            return info;
        }
    }
    return null;
}

ملاحظة على وجه الخصوص Javadoc: "إرجاع المعلومات للشبكة النشطة، أو NULL إذا كان لا شيء نشط".

نصائح أخرى

أنا أفهم أن لديك اتصال والمحاكي قادر على استخدامه ولكن بعد ذلك، إرجاع المكالمة إلى getactivenettworkinfo () لك لاغيا على أي حال، وهذا هو السبب في أنك محيرة.

حسنا، كانت الشكوك الخاصة بك على حق: getactivenettworkinfo () لا يعمل على المحاكي وإرجاع دائما فارغة.

لقد وجدت أنه إذا ضغطت F8 لتشغيل 3G في المحاكي، فسيتم إرجاع CM.GetactivenetTorkinfo () ثم إرجاع مقبض شبكات غير قابل للاستخدام غير فارغ.

بدلاً من

if(connex.equals("WIFI") doSomething();

محاولة

if("WIFI".equals(connex)) doSomething();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top