我搜索了很多,我嘗試了幾種方法,但我找不到任何可以避免我的錯誤的方法。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我更新了我的問題,查看我的編輯。謝謝。 –