我使用this previous thread中建议的策略在非活动类中创建自定义振动器。
import android.content.Context;
import android.os.Vibrator;
public class IntensityVibrator {
private static IntensityVibrator iv;
private Vibrator vib= null;
private Context context;
private Vibrator getVibrator(){
if(vib == null){
vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
}
return vib;
}
public static IntensityVibrator getManager(<an_activity> context) {
if(iv == null){
iv = new IntensityVibrator();
}
iv.setContext(context);
return iv;
}
private void setContext(Context context){
this.context = context;
}
public void regularVibrate(long millis){
vib.vibrate(millis);
}
}
我在这样的方式中使用它:
vib = (IntensityVibrator) IntensityVibrator.getManager(<an_activity>);
我创建vib对象的类也是非活动类。因此,我通过an_activity上下文传递上下文。
应用程序崩溃了调用最后一个方法的时间。调试显示代码工作正常,直到调用vib.vibrate(millis)。你能猜出这里可能出现什么问题吗?
答案 0 :(得分:2)
在我看来,您永远不会初始化您的vib
类变量,因此它是null
而您在调用NullPointerException
时会得到regularVibrate
初始化getVibrator
的私有vib
方法永远不会被调用:您应该在调用getManager
之后在setContext
中调用它。