2010-03-14 17 views
10

Tengo una actividad que muestra algunas entradas de la lista. Cuando hago clic en un elemento de la lista, mi aplicación comprueba qué tipo de conexión está disponible ("WIF" o "MOBILE"), a través de NetworkInfo.getTypeName(). Tan pronto como llamo a este método, obtengo una NullpointerException. ¿Por qué?Android, NetworkInfo.getTypeName(), NullpointerException

Probé esto en el emulador, porque mi teléfono no está disponible actualmente (está roto ...). Supongo que este es el problema? Esta es la única explicación que tengo, si ese no es el caso, no tengo idea de por qué esto sería nulo.

He aquí algunos fragmentos de código:

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

Respuesta

10

La llamada getActiveNetworkInfo() puede devolver null si no existe una red activa y es necesario comprobar para eso. Aquí está el código fuente 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; 
} 

Nota en particular, el Javadoc: "devuelve la información de la red activa, o null si no está activo".

2

Entiendo que tiene conexión y el emulador puede usarla, pero luego la llamada a getActiveNetworkInfo() le devuelve nulo de todos modos, y es por eso que está desconcertado.

Bueno, sus sospechas eran correctas: getActiveNetworkInfo() no funciona en el emulador y siempre devuelve nulo.

2

Descubrí que si presiona F8 para activar 3G en el emulador, cm.getActiveNetworkInfo() luego devuelve un identificador NetworkInfo utilizable que no es nulo.

-1

En lugar de

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

tratar

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

No vuelvas a hacer las condiciones de Yoda por favor ... yo más bien prefieren si (Connex! = Null && connext.equals ("Wi-Fi")) – Necronet

Cuestiones relacionadas