我搜索了很多,我尝试了几种方法,但我找不到任何可以避免我的错误的方法。getExtra崩溃应用程序在服务
我正在为我的学习开发应用程序,其中是我的MainActivity中的字符串,然后在我的服务中调用它。我想是这样的:
接下来的这个人去在我myService.class
//在我myService.class延伸服务
public class myService extends Service{
AlarmManager manager;
PendingIntent pintent;
String te;
@Override
public void onCreate()
{
manager = (AlarmManager)(this.getSystemService(Context.ALARM_SERVICE));
pintent = PendingIntent.getBroadcast(this, 0, new Intent("blahblah"), 0);}
@Override
public int onStartCommand(Intent intent, int flags, int startid)
{
super.onStartCommand(intent, flags, startid);
te = intent.getStringExtra("tst"); //if I change this line to te = "something", everything goes fine
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(getApplicationContext(),te, Toast.LENGTH_SHORT).show();
}
};
this.registerReceiver(receiver, new IntentFilter("blahblah"));
// set alarm to fire 30 min and waits 2 min
manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1000*30*60, 1000*2*60, pintent);
return START_STICKY;}
public IBinder onBind(Intent p1)
{
// TODO: Implement this method
return null;
}
}
这里的代码运行完美,但是当我退出我的应用程序时,它崩溃了。 1分钟后,我的设备再次显示我的应用程序崩溃,确认我的应用程序“成功”后台运行。它有什么问题? 我也学会了我可以使用IntentService而不是Service,对于长期任务来说更好,它们之间有什么区别?
编辑***
我收到以下错误:java.lang.NullPointerExeption。 所以我改变这个:
te = intent.getStringExtra(“tst”);
向该:
尝试 { TE = intent.getStringExtra( “TST”); } 赶上(NullPointerException异常E) {}
当我改成了我的应用程序适用于任何的错误,但问题是:我需要从我的MainActivity找回我的字符串,当我关闭我的应用我的服务运行没有错误,但我的“te”字符串采用null valor,我可以做些什么来“保存”我的服务中的字符串,以便能够使用它并在关闭我的应用程序后继续显示“正在工作”消息?我应该使用SharedPreferences吗?
希望我很清楚。
请发布崩溃日志。 – Steelight
我没有任何日志,明天我可以使用Eclipse来查看它,现在我正在使用AIDE(一个直接在我的设备中工作的IDE),所以我编译它并运行它。一旦应用程序安装,我按下按钮,AlarmManager按预期工作,但是当我退出我的应用程序时出现一条消息:MyApp已停止 –
@ Steelight我更新了我的问题,查看我的编辑。谢谢。 –