Pregunta

Tengo una actividad que muestra algunas entradas de la Lista. Cuando hago clic en un elemento de la lista de aplicaciones mis cheques qué tipo de conexión está disponible ( "WIF" o "móvil"), a través de NetworkInfo.getTypeName (). Tan pronto como me llamo este método consigo una NullPointerException. ¿Por qué?

He probado esto en el emulador, porque mi teléfono no está actualmente disponible (que se ha roto ...). Asumo 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.

Aquí hay algo fragmento 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();
   }
  });
 }
}
¿Fue útil?

Solución

El getActiveNetworkInfo() llamada puede devolver null si no existe una red activa y es necesario comprobar para eso. Aquí está el código fuente de la aquí .

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

Tenga en cuenta especialmente el Javadoc:. "Devolver la información de la red activa, o null si no está activo"

Otros consejos

Yo entiendo que usted tiene conexión y el emulador es capaz de usarlo, pero entonces la llamada a getActiveNetworkInfo () que devuelve un valor nulo de todos modos, y es por eso que está confundido.

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

.

He descubierto que si presiona F8 para activar el 3G en el emulador, cm.getActiveNetworkInfo () devuelve una asa NetworkInfo utilizable no nulo.

En lugar de

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

try

if("WIFI".equals(connex)) doSomething();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top