Android nullpointerexception - PullRequest
       1

Android nullpointerexception

2 голосов
/ 09 августа 2011

Чтобы быть кратким ... У меня есть виджет, вы можете увидеть важную часть ниже

public class ExampleWidget extends AppWidgetProvider {
private PhoneStateListener listener;
private TelephonyManager telephonyManager;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    listener = new PhoneStateListener() {
        @Override
        public void onDataConnectionStateChanged(int state) {
            // removed the code
        }

    };

    telephonyManager = (TelephonyManager) context
            .getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(listener,
            PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

}

@Override
public void onDisabled(Context context) {
    telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);
    super.onDisabled(context);
}
}

, и я получаю исключение nullpointer в telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);, когда я удаляю виджет с главного экрана.

Чего мне не хватает?

Ответы [ 4 ]

2 голосов
/ 09 августа 2011

context.getSystemService() может вернуть null, и вы не докажете telephonyManager, если это null.Если имя, обозначенное Context.TELEPHONY_SERVICE, не существует в системе, telephonyManager будет null.

В дополнение к вашему комментарию:

@Override
public void onDisabled(Context context) {
    if (telephonyManager!=null){
        telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);
    }
    super.onDisabled(context);
}

Если вам нужно запуститьэтот код в onDisabled методе вы должны инициализировать telephonyManager.Он пахнет, как метод onDisabled вызывается как-то раньше onUpdate или если у вас есть два разных экземпляра.

0 голосов
/ 29 марта 2012

У меня такой же пробем.На самом деле проблема исчезла после того, как я сделал все нулевые поля статическими.Похоже, это действительно еще один пример провайдера, который получает onDisabled.

0 голосов
/ 09 августа 2011

Просто проверьте telephonyManager, чтобы увидеть, является ли оно нулевым.

if(telephonyManager==null){
    telephonyManager = (TelephonyManager) context
        .getSystemService(Context.TELEPHONY_SERVICE);
}
telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);
0 голосов
/ 09 августа 2011
public class ExampleWidget extends AppWidgetProvider {
private PhoneStateListener listener;
private TelephonyManager telephonyManager;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {


    telephonyManager = (TelephonyManager) context
            .getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(listener,
            PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

}

@Override
public void onDisabled(Context context) {
    telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);
    super.onDisabled(context);
}
listener = new PhoneStateListener() {
        @Override
        public void onDataConnectionStateChanged(int state) {
            // removed the code
        }

    };

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...