gpt4 book ai didi

android - 从广播 Intent 中获取 Parcelable 数据时出现 ClassNotFoundException

转载 作者:太空狗 更新时间:2023-10-29 14:55:28 25 4
gpt4 key购买 nike

在我的一个类(class)中,我有一个名为 getResultReceiver() 的方法,它创建了一个 ResultReceiver 的实例。 :

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 intent = new Intent(“my.result.receiver.action”);
intent.putExtra(“my-result-receiver", getResultReceiver());
context.sendBroadcast(intent);

以上所有代码都在主线程之外的另一个线程中运行,MyTaskservice 实例化也在单独的进程中运行。

在我的主要 Activity 类中,我有用于上述广播 Intent 的广播接收器:

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");
}

};

当我运行我的应用程序时,我可以看到日志“Received broadcast”,但我也遇到了一个ClassNotFoundException:

FATAL EXCEPTION: main
E/AndroidRuntime( 2649): java.lang.RuntimeException: Error receiving broadcast Intent { act=my.result.receiver.action flg=0x10 (has extras) } in com.xyz.MainActivity$8@18994f97
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)

为什么我得到这个指向 MyTask 类的 ClassNotFoundException?如何解决?

=====更新======

我尝试了@Samuel 的回答,创建了一个名为 MyResultReceiver 的公共(public)类,现在异常几乎相同,但不是 $1 ,而是显示 我的结果接收者:

ClassNotFoundException when unmarshalling: com.xyz.MyTask.MyResultReceiver
...

最佳答案

2 个想法 -

1- 你有没有注册你的广播接收器。

2- 尝试使用 onNewIntent() 方法。

关于android - 从广播 Intent 中获取 Parcelable 数据时出现 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com