java.lang.ClassCastException: android.os.ResultReceiver нельзя преобразовать в com.hello.utils.network.MyReciever

я пытаюсь использовать пользовательский ResultReciever из намерения в намерениеService, но я получаю эту причудливую ошибку.

есть идеи почему?

Следовали этому руководству по использованию resulReciever в качестве обратных вызовов.

http://lalit3686.blogspot.co.uk/2012/06/how-to-update-activity-from-service.html

Вот мой код из активности, которая запускает службу:

private void doNetworkInitCalls() {
    intent = new Intent(getApplicationContext(), NetworkService.class);
    intent.setAction(NetworkService.ACTION_GET_CITY_INFO);
    intent.putExtra(NetworkService.EXTRA_LATLON, new LatLon(51.5073, 0.1276));
    MyReciever reciever = new MyReciever(null);
    reciever.setOnCityInfoRecieved(this);
    intent.putExtra(MyReceiver.RESULT_RECEIEVER_EXTRA, reciever);
    startService(getCityInfoIntent);
}

Класс MyReciever:

public class MyReciever extends ResultReceiver {

    public static final String RESULT_CITY_INFO = "cityInfoData";
    public static final String RESULT_RECEIEVER_EXTRA = "reciever";

    public MyReciever(Handler handler) {
        super(handler);
    }

    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData) {
        super.onReceiveResult(resultCode, resultData);
    }
}

ИнтентСервис:

public class NetworkService extends IntentService {

 @Override
 protected void onHandleIntent(Intent intent) {
     if (intent != null) {
         MyReciever reciever = intent.getParcelableExtra(MyReciever.RESULT_RECEIEVER_EXTRA); //fails on this line
    }
}

person Jonathan    schedule 15.10.2014    source источник
comment
Приемник, Приемник, Приемник..? (проверяйте опечатки)   -  person Hacketo    schedule 15.10.2014
comment
жаль плохая паста. отредактировал фрагмент выше   -  person Jonathan    schedule 15.10.2014
comment
Покажите свой класс ResultReceiver.java   -  person Harsha Vardhan    schedule 15.10.2014
comment
Что такое getCityInfoIntent? Разве вы не должны делать startService(intent); вместо этого?   -  person Pedro Oliveira    schedule 15.10.2014
comment
проблема в том, что только часть ResultReceiver MyReciever сериализуется в посылку... ссылка, которую вы предоставляете, имеет вводящий в заблуждение код, сериализация посылки осуществляется по значению, а не по ссылке, поэтому у вас нет того же объекта на другой стороне, но он воссоздан экземпляр. ..   -  person Selvin    schedule 15.10.2014


Ответы (1)


Что насчет этого :

public class NetworkService extends IntentService {

 @Override
 protected void onHandleIntent(Intent intent) {
     if (intent != null) {
         ResultReceiver reciever = intent.getParcelableExtra(MyReciever.RESULT_RECEIEVER_EXTRA);
    }
}

Поскольку CREATOR не был переопределен в MyReciever, он создает экземпляры ResultReceiver. Просто получите свой экземпляр ResultReceiver из намерения как такового, ResultReceiver.

person ToYonos    schedule 15.10.2014
comment
Разве при этом не теряется ссылка на мой фактический CustomResultReciever? - person Jonathan; 15.10.2014
comment
Нет, получатель по-прежнему является MyReciever, но рассматривается NetworkService как ResultReceiver. - person ToYonos; 15.10.2014