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的主要内容,如果未能解决你的问题,请参考以下文章