我有一個啓動的服務,一些活動必須綁定到它才能在設置視圖之前獲取一些數據。一切工作正常,但一些(很少)時間,我得到了一個NullPointerException。我的簡化活動是:服務異常NullPointerException
public class MyActivity extends Activity {
TextView tvName;
boolean mIsMyServiceBound;
MyService mMyService;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
MyService.MyServiceBinder myServiceBinder = (MyService.MyServiceBinder) service;
mMyService = myServiceBinder();
mIsMyServiceBound = true;
// Set up views
tvName.setText(mMyService.getName());
}
@Override
public void onServiceDisconnected(ComponentName className) {
mIsMyServiceBound = false;
mMyService = null;
}
};
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourlayout);
tvName = (TextView) findViewById(R.id.tv_name);
...
}
@Override
protected void onStart() {
super.onStart();
// Bind to LocalService
Intent intent = new Intent(this, ChatService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
mIsChatServiceBound = true;
}
@Override
protected void onStop() {
super.onStop();
// Unbind from the service
if (mIsChatServiceBound) {
unbindService(mConnection);
mIsChatServiceBound = false;
}
}
@Override
public void onDestroy() {
super.onDestroy();
tvName = null;
}
}
那麼,它通常工作正常。但這樣做,當我有一個NullPointerException:
tvName.setText(mMyService.getName());
錯誤告訴tvName是空的,但我不明白這怎麼可能,因爲它的onCreate後調用。這個錯誤很少發生,但這很煩人。可能該活動已被銷燬,但服務連接偵聽器未取消?如果這是真的,當活動被破壞時我怎麼能取消那個服務連接?
在此先感謝!
你沒有擴展'活動'或類似的東西,請不要過分簡化你在這裏發佈的代碼。您可能會創造比您更多的錯誤,我們無法爲您提供幫助。 – yennsarah
我編輯了代碼,我忘了寫它。對不便,我已經更新了代碼。 – FVod
爲什麼你在'onDestroy()'中設置'tvName'爲null?如果你簡單地添加一個if(tvName == null)//做一些其他的事情,也許重新開始這個活動,否則tvName.setText(「」)',你不會得到這個崩潰。 – yennsarah