2010-03-14 8 views
10

J'ai une activité qui montre certaines entrées de la liste. Lorsque je clique sur un élément de la liste, mon application vérifie quel type de connexion est disponible ("WIF" ou "MOBILE"), via NetworkInfo.getTypeName(). Dès que j'appelle cette méthode, j'obtiens une exception NullpointerException. Pourquoi?Android, NetworkInfo.getTypeName(), NullpointerException

J'ai testé cela sur l'émulateur, car mon téléphone n'est actuellement pas disponible (il est cassé ...). Je suppose que c'est le problème? C'est la seule explication que j'ai, si ce n'est pas le cas je ne sais pas pourquoi cela serait nul.

Voici quelques extrait de code:

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

Répondre

10

L'appel getActiveNetworkInfo() peut retourner null s'il n'y a pas de réseau actif et vous devez vérifier cela. Voici le code source de here.

/** 
* 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; 
} 

note en particulier la javadoc: « retour l'information pour le réseau actif, ou null si aucun est actif ».

2

Je comprends que vous avez une connexion et l'émulateur est capable de l'utiliser, mais l'appel à getActiveNetworkInfo() vous renvoie quand même null, et c'est pourquoi vous êtes perplexe. Eh bien, vos soupçons étaient corrects: getActiveNetworkInfo() ne fonctionne pas sur l'émulateur et renvoie toujours null.

2

J'ai trouvé que si vous appuyez sur F8 pour activer la 3G dans l'émulateur, cm.getActiveNetworkInfo() retourne alors un handle NetworkInfo utilisable non nul.

-1

Au lieu de

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

essayer

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

Ne jamais faire conditions Yoda s'il vous plaît ... Je préfère plutôt si (Connex! = Null && connext.equals ("WIFI")) – Necronet