当我在Android Studio的Debug中运行我的代码时,我的应用程序运行良好,但是当我创建APK并将其安装在设备上并启动我的应用程序时,应用程序会出现NullPointerException错误并被杀死(使用Android Debug Monitor)。这是代码:
public class MusicService extends IntentService {
boolean INTERNET_CONNECTION = false;
boolean COMMAND_DOWNALOAD_SDCARD = false;
String TABLE_NAME = "";
String COMMAND_ARGUMENT = "";
// Here throw sometimes the error - Line 42
AudioManager audio;
MediaPlayer mp = new MediaPlayer();
long TIME_ELAPSED = 0;
long TIME_STARTED = 0;
boolean ALIVE = true;
long SLEEP_TIME = 5000;
String SERVER_URL = "http://xxx.xxx";
public MusicService() {
super("Service");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d("SERVICE", "STARTED");
initialize();
initializeTimer();
while (ALIVE) {
...
}
}
private void initialize() {
// Get phone number set the table name
TABLE_NAME = "t" + getPhoneNumber();
audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
// Wait for internet connection
INTERNET_CONNECTION = waitInternetConnection();
Log.d("INITIALIZE", "COMPLETED");
}
...
}
启动完成后启动应用程序。经过一段时间尝试运行它后,我在第42行得到了错误,我改变了这一行:
AudioManager audio = null;
到
AudioManager audio;
但仍然得到错误,但现在不再显示该行。
答案 0 :(得分:0)
这些之间没有区别:AudioManager audio = null;
和AudioManager audio;
。
将行显式分配给null
更改为对象并不会改变任何功能;这意味着audio
现在隐含地默认为null
。
显然,getSystemService()
的作用有所不同,具体取决于您是否处于调试环境与生产环境之间。要找出问题所在,请进入该服务。我们这里没有足够的信息为您调试。
audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);