简而言之...我有一个小部件,您可以在下面看到重要的部分
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/