简而言之...我有一个小部件,您可以在下面看到重要的部分

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


从主屏幕删除小部件时,我在telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);处收到nullpointer异常。

我想念什么?

最佳答案

context.getSystemService()可能返回null,并且如果telephonyManager则不证明。如果系统中不存在由null标识的名称,则Context.TELEPHONY_SERVICE将为telephonyManager

除了您的评论:

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


如果您需要在null方法中运行此代码,则应初始化telephonyManager。它闻起来像是在onDisabled之前以某种方式调用了onDisabled方法,或者如果您有两个不同的实例。

关于android - Android nullpointerexception,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6995619/

10-10 08:01