- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在发送 Parcelable
时遇到问题来自一个 Activity
的数据给另一个。
MY QUESTION: Is it possible to add/keep
Class<?>
object inside aParcelable
class which has to be sent to anotherActivity
? If possible then how can I achieve it?
我已经尝试这样做了,但我在 Android 5.0, 5.1 and 5.1.1
中收到以下异常版本:
我的 LOGCAT:
04-14 14:58:36.838: E/AndroidRuntime(31164): FATAL EXCEPTION: main
04-14 14:58:36.838: E/AndroidRuntime(31164): Process: com.example, PID: 31164
04-14 14:58:36.838: E/AndroidRuntime(31164): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.v2.BaseAct}: java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = java.lang.Class)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.app.ActivityThread.access$800(ActivityThread.java:151)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Handler.dispatchMessage(Handler.java:102)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Looper.loop(Looper.java:135)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.app.ActivityThread.main(ActivityThread.java:5254)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.lang.reflect.Method.invoke(Native Method)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.lang.reflect.Method.invoke(Method.java:372)
04-14 14:58:36.838: E/AndroidRuntime(31164): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
04-14 14:58:36.838: E/AndroidRuntime(31164): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
04-14 14:58:36.838: E/AndroidRuntime(31164): Caused by: java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = java.lang.Class)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readSerializable(Parcel.java:2384)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readValue(Parcel.java:2203)
04-14 14:58:36.838: E/AndroidRuntime(31164): at com.example.template.HomeItemCls.readFromParcel(HomeItemCls.java:251)
04-14 14:58:36.838: E/AndroidRuntime(31164): at com.example.template.HomeItemCls.<init>(HomeItemCls.java:213)
04-14 14:58:36.838: E/AndroidRuntime(31164): at com.example.template.HomeItemCls$1.createFromParcel(HomeItemCls.java:260)
04-14 14:58:36.838: E/AndroidRuntime(31164): at com.example.template.HomeItemCls$1.createFromParcel(HomeItemCls.java:1)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readParcelable(Parcel.java:2252)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readValue(Parcel.java:2152)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readListInternal(Parcel.java:2526)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readArrayList(Parcel.java:1842)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readValue(Parcel.java:2173)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.BaseBundle.unparcel(BaseBundle.java:221)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.BaseBundle.containsKey(BaseBundle.java:269)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.content.Intent.hasExtra(Intent.java:4879)
04-14 14:58:36.838: E/AndroidRuntime(31164): at com.example.v2.BaseAct.onCreate(BaseAct.java:184)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.app.Activity.performCreate(Activity.java:5990)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
04-14 14:58:36.838: E/AndroidRuntime(31164): ... 10 more
04-14 14:58:36.838: E/AndroidRuntime(31164): Caused by: java.lang.ClassNotFoundException: com.example.v2.fragment.SongListFragment
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.lang.Class.classForName(Native Method)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.lang.Class.forName(Class.java:309)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel$2.resolveClass(Parcel.java:2370)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1641)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:657)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.io.ObjectInputStream.readNewClass(ObjectInputStream.java:1512)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:755)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
04-14 14:58:36.838: E/AndroidRuntime(31164): at android.os.Parcel.readSerializable(Parcel.java:2378)
04-14 14:58:36.838: E/AndroidRuntime(31164): ... 28 more
04-14 14:58:36.838: E/AndroidRuntime(31164): Caused by: java.lang.ClassNotFoundException: com.example.v2.fragment.SongListFragment
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.lang.Class.classForName(Native Method)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
04-14 14:58:36.838: E/AndroidRuntime(31164): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
04-14 14:58:36.838: E/AndroidRuntime(31164): ... 38 more
04-14 14:58:36.838: E/AndroidRuntime(31164): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
我的代码:
public class HomeItemCls implements Parcelable
{
private Class<?> itemActivity;
private Class<?> itemFragment;
public Class<?> getItemActivity()
{
return itemActivity;
}
public void setItemActivity(Class<?> itemActivity)
{
this.itemActivity = itemActivity;
}
public void setItemFragment(Class<?> itemFragment)
{
this.itemFragment = itemFragment;
}
public Class<?> getItemFragment()
{
return itemFragment;
}
public HomeItemCls()
{
// TODO Auto-generated constructor stub
}
public HomeItemCls(Parcel in)
{
readFromParcel(in);
}
@Override
public int describeContents()
{
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags)
{
// TODO Auto-generated method stub
dest.writeValue(getItemFragment());
dest.writeValue(getItemActivity());
}
@SuppressWarnings("unchecked")
private void readFromParcel(Parcel in)
{
// TODO Auto-generated method stub
setItemFragment((Class<?>) in.readValue(Class.class.getClassLoader()));
setItemActivity((Class<?>) in.readValue(Class.class.getClassLoader()));
}
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator()
{
public HomeItemCls createFromParcel(Parcel in)
{
return new HomeItemCls(in);
}
public HomeItemCls[] newArray(int size)
{
return new HomeItemCls[size];
}
};
}
最佳答案
作为Class
工具 Serializable
不是Parcelable
, 你不能使用 readValue
/writeValue
对(这些是 Parcelable
函数)。
因此,您应该使用 writeSerializable
对/readSerializable
(这些是 Serializable
函数)。使用 readSerializable
您必须将返回值转换为特定类型。
可选,你也应该改变
Class<?> itemFragment;
到
Class<? extends Fragment> itemFragment;
,
和
private Class<?> itemActivity;
到
private Class<? extends Activity> itemActivity;
关于android - 如何在 Android Lollipop 版本的 Parcelable 类中添加/保留 Class<?> 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29623905/
我有两个 Activity,A 和 B。我试图将对象从 Activity A 发送到 Activity B。在 Activity A 中,我可以看到我的列表包含两个项目,但是当我在 Activity
我想在android中使用Parcelable而不是Serializable,因为它更快,推荐。我的问题是,我好像无法打包Java提供的类LinkedHashMap,对吧? 例如 public cla
我在为我的 Android 应用程序使用 parcelables 时遇到了一些问题。 我有一个名为 Transport 的自定义类,其中包含一堆 RoutePoint - 从文件加载并保存在数组中的实
编辑 清理和重建后,没有生成类 我在尝试使用 Parcels.wrap() 时遇到此错误 Unable to find generated Parcelable class for xyz.xyz.m
我有一个扩展 Parcelable 的类,我们称它为 A 类。 我有另一个扩展 Parcelable 的类,我们称之为 B 类。 A 的成员变量之一是 B 类对象的 ArrayList。 我正在尝试编
当我尝试使用 @Parcelize 注释 enum class 或 object 时,会导致错误 'Parcelable' should是一个类,既作为编辑器提示又作为编译失败。我可以 @Parcel
确实是相当简单的场景,但我在 Google 上找不到任何相关内容,所以这里是: class ContainerClass implements Parcelable { List _items;
我有一个实现Parcelable接口(interface)的类: class A implements Parcelable { } 我有另一个类 B 包含一个 A 对象作为实例变量。在类 B 内的
我如何实现写我的Set >使用通用数据类型到我的包裹? 这是我的代码.. dest.writeList(getArrTRA()); dest.writeList(ge
我有一个 Java Bean 类,在某些字段上用 @Parcel(Parcel.Serialization.BEAN) 和 Gson 的 @SerializedName 注释: 问题.java: @P
有时,我收到此错误,我不知道我的代码出了什么问题帮忙! 任何有帮助的建议代码。 这是我的错误报告: com.example E/UncaughtException: java.lang.Runtime
我正在实现具有另一个 Parcelable insde 的 Parcelable 类。 在 OuterParcelable 类中: @Override public void writeToParce
我想编码和解码一个实现 Parcelable 到/来自字节数组的类。 我很清楚 Parcelable 表示不稳定,因此不适合长期存储实例。但是我有一个用例,我需要序列化一个对象,它不是一个展示停止器如
有没有办法使用Parceler使用 Kotlin 数据类和构造函数进行序列化,而不为每个字段使用 @ParcelProperty 注释? 如果我尝试使用这样的库: @Parcel data class
我正在尝试编写一个可打包的数据对象,以便在我的 android 应用程序中从 activityA 传递到 activityB。 我的对象正在传递所有数据,除了我的可用服务类的 arraylist da
我在上课时遇到问题 Parcelable .问题是,我正在尝试将类(class)中的成员写入包裹,该成员是 ArrayList。目的。 ArrayList是 Serializable ,并且列表中的对
我有一个可打包的团队类 @Parcelize class Team(var name: String, var teamMembers: List, var id: UUID): Parcelable
我有一个包含另一个对象的对象,我想使用 Parcelable 将一个 fragment 发送到另一个 fragment ,例如: Fragment fragment = new Fragment();
Parceler 的自述文件指出它可以与其他基于 POJO 的库一起使用,尤其是 SimpleXML。 是否有任何示例可以证明其用法? 我已经成功地将 Parceler 与 GSON 结合使用: Gs
我是 android 的新手,在思考 Parcelable 界面时遇到了一些麻烦。 我终于找到了这个: https://stackoverflow.com/a/2141166/6647053 上述回答
我是一名优秀的程序员,十分优秀!