В одном из моего класса, у меня есть метод, называемый getResultReceiver()
который создал экземпляр ResultReceiver:ClassNotFoundException когда получают Parcelable данные широковещательного намерения
public class MyTask {
ResultReceiver resultReceiver;
public ResultReceiver getResultReceiver() {
resultReceiver = new ResultReceiver(new Handler()) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
…
}
}
return resultReceiver;
}
}
Я посылаю широковещательного намерения с выше ResultReceiver
, например, как дополнительный данные:
Intent intent = new Intent(“my.result.receiver.action”);
intent.putExtra(“my-result-receiver", getResultReceiver());
context.sendBroadcast(intent);
Все выше код работает в другой поток, чем основной поток, то MyTask
конкретизируется с помощью service работает в отдельном процессе.
В моем основном активности класса, у меня есть приемник вещания для выше широковещательного намерения:
BroadcastReceiver myReceiverInActivity = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(“MyApp”, "Reveived broadcast ");
//Here, I got ClassNotFoundException when unmarshalling : com/xyz/MyTask$1
ResultReceiver resultReceiver
= intent.getParcelableExtra("my-result-receiver");
}
};
Когда я запускаю мое приложение, я могу видеть журнал «Полученных вещать», но я также получил ClassNotFoundException:
FATAL EXCEPTION: main
E/AndroidRuntime(2649): java.lang.RuntimeException: Error receiving broadcast Intent { act=my.result.receiver.action flg=0x10 (has extras) } in [email protected]
E/AndroidRuntime(2649): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:882)
E/AndroidRuntime(2649): at android.os.Handler.handleCallback(Handler.java:739)
E/AndroidRuntime(2649): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime(2649): at android.os.Looper.loop(Looper.java:211)
E/AndroidRuntime(2649): at android.app.ActivityThread.main(ActivityThread.java:5373)
E/AndroidRuntime(2649): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(2649): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(2649): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
E/AndroidRuntime(2649): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
E/AndroidRuntime(2649): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.xyz.MyTask$1
E/AndroidRuntime(2649): at android.os.Parcel.readParcelableCreator(Parcel.java:2326)
E/AndroidRuntime(2649): at android.os.Parcel.readParcelable(Parcel.java:2276)
E/AndroidRuntime(2649): at android.os.Parcel.readValue(Parcel.java:2183)
E/AndroidRuntime(2649): at android.os.Parcel.readArrayMapInternal(Parcel.java:2516)
E/AndroidRuntime(2649): at android.os.BaseBundle.unparcel(BaseBundle.java:221)
E/AndroidRuntime(2649): at android.os.Bundle.getParcelable(Bundle.java:755)
E/AndroidRuntime(2649): at android.content.Intent.getParcelableExtra(Intent.java:5089)
E/AndroidRuntime(2649): at com.xyz.MainActivity$8.onReceive(MainActivity.java:874)
E/AndroidRuntime(2649): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:872)
Почему я получил эту ClassNotFoundException, что указывает на MyTask
класс? как его решить?
===== UPDATE ======
Я попытался ответить @Samuel «s, сделал публичный класс с именем MyResultReceiver
, теперь исключение составляет почти то же самое, но вместо $1
, он показывает MyResultReceiver
:
ClassNotFoundException when unmarshalling: com.xyz.MyTask.MyResultReceiver
...
1. Я зарегистрировался, иначе я не могу видеть журнал, о котором я упоминал. – user842225