В моем приложении для Android запущена служба, которая содержит HashMap, который я хотел бы использовать в Activity. Поэтому я связал сервис со своей деятельностью и создал связь между ними, чтобы использовать структуру данных.
Вот как я это сделал до сих пор:
Деятельность (соответствующий код):
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
imService = ((IMService.IMBinder) service).getService();
}
public void onServiceDisconnected(ComponentName className) {
imService = null;
Toast.makeText(ViewFlipperTest.this,
R.string.local_service_stopped, Toast.LENGTH_SHORT).show();
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bindService(new Intent(ViewFlipperTest.this, IMService.class),
mConnection, Context.BIND_AUTO_CREATE);
.
.
.
}
protected void onResume() {
super.onResume();
bindService(new Intent(ViewFlipperTest.this, IMService.class),
mConnection, Context.BIND_AUTO_CREATE);
}
private void getMap(ViewFlipper flipper2) {
Map<Integer, internalChatObj> tempMap = imService.getMapwData();
}
Сервис (соответствующий код):
public class IMService extends Service implements IAppManager{
.
.
.
public Map getMapwData(){
if(getNumberOpenChats()>0){
return openChatMapwData;
}
else
return null;
}
}
Каждый раз, когда я пытаюсь запустить метод getMap (), я получаю нулевой указатель. Я даже поставил проверку, чтобы увидеть, был ли imService нулевым, и каждый раз был нулевым Кажется, что он пытается получить данные от Сервиса, но привязка к сервису нулевая, это правда? У меня есть проверка в Сервисе, чтобы отправить ноль, если карта пуста, так что это не должно быть проблемой.
Любая помощь?
Редактировать на основе советов Уилла
Новый код
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
imService = ((IMService.IMBinder) service).getService();
dialog.dismiss();
}
public void onServiceDisconnected(ComponentName className) {
imService = null;
Toast.makeText(ViewFlipperTest.this,
R.string.local_service_stopped, Toast.LENGTH_SHORT).show();
}
};
public void onCreate(Bundle savedInstanceState) {
dialog = ProgressDialog.show(getApplicationContext(), null,"Loading..", true, false);
}
Редактировать II
Класс IMBinder (кажется стандартным, нет?)
public class IMBinder extends Binder {
public IAppManager getService() {
return IMService.this;
}
}
Нужно ли иметь IMService.this вместо этого?