java.lang.ClassCastException:android.os.ResultReceiver无法强制转换为com.hello.utils.network.MyReceiver
我试图使用一个自定义ResultReciever从一个intent转换到一个intentService,但我得到了这个bizare错误 你知道为什么吗 在使用ResultReceiver作为回调时遵循此指南 以下是启动服务的活动中的代码:java.lang.ClassCastException:android.os.ResultReceiver无法强制转换为com.hello.utils.network.MyReceiver,java,android,android-intent,android-intentservice,Java,Android,Android Intent,Android Intentservice,我试图使用一个自定义ResultReciever从一个intent转换到一个intentService,但我得到了这个bizare错误 你知道为什么吗 在使用ResultReceiver作为回调时遵循此指南 以下是启动服务的活动中的代码: private void doNetworkInitCalls() { intent = new Intent(getApplicationContext(), NetworkService.class); intent.setAction(
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);
}
MyReceiver类:
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
}
}
那么这个呢:
public class NetworkService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
ResultReceiver reciever = intent.getParcelableExtra(MyReciever.RESULT_RECEIEVER_EXTRA);
}
}
由于在MyReceiver中没有重新定义CREATOR,它会创建ResultReceiver实例。只需按原样从intent接收ResultReceiver实例即可。Receiver,Receiver,Receiver。。?(检查拼写错误)对不起,粘贴错误。编辑上面的代码片段显示您的ResultReceiver.java类什么是
GetCityInfoContent
?你不应该做startService(intent)代码>相反?问题是只有MyReceiver的ResultReceiver“部分”被序列化到parcel。。。您提供的链接有误导性的代码,包裹序列化是按值而不是按引用进行的,因此您在另一端没有相同的对象,但它是在intance中重新创建的…这不会丢失对我的实际CustomResultReciever的引用吗?不,reciever仍然是MyReciever,但NetworkService将其视为ResultReceiver