java.lang.ClassCastException:android.os.ResultReceiver 无法转换为 com.hello.utils.network.MyReciever

Posted

技术标签:

【中文标题】java.lang.ClassCastException:android.os.ResultReceiver 无法转换为 com.hello.utils.network.MyReciever【英文标题】:java.lang.ClassCastException: android.os.ResultReceiver cannot be cast to com.hello.utils.network.MyReciever 【发布时间】:2014-12-10 14:28:52 【问题描述】:

我正在尝试使用自定义 ResultReciever 从一个意图到一个意图服务,但我得到了这个奇怪的错误。

任何想法为什么?

按照本指南使用 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
    

【问题讨论】:

接收器,接收器,接收器..? (检查错别字) 抱歉粘贴错误。编辑了上面的sn-p 显示你的 ResultReceiver.java 类 什么是getCityInfoIntent?你不应该改用startService(intent); 吗? 问题是 MyReciever 的只有 ResultReceiver “部分”被序列化为包裹......您提供的链接具有误导性代码,包裹序列化是按值而不是通过引用,因此您没有相同的对象另一方面,但它是否重新创建了实例... 【参考方案1】:

这个呢:

public class NetworkService extends IntentService 

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

由于没有在 MyReciever 中重新定义 CREATOR,它会创建 ResultReceiver 实例。只需从 Intent 接收您的 ResultReceiver 实例,即 ResultReceiver。

【讨论】:

这不会丢失对我实际 CustomResultReciever 的引用吗? 不,接收者仍然是 MyReciever,但被 NetworkService 视为 ResultReceiver 这不是我的经验。我无法将类型转换为 ResultReceiver 的子项。也许我做错了什么?

以上是关于java.lang.ClassCastException:android.os.ResultReceiver 无法转换为 com.hello.utils.network.MyReciever的主要内容,如果未能解决你的问题,请参考以下文章