天道酬勤,学无止境

Realm.io(Android)中包裹(@Parcel)的使用(Usage of parceler (@Parcel) with Realm.io (Android))

问题

我有以下代码会产生错误: Error:Parceler: Unable to find read/write generator for type io.realm.Realm for io.realm.RealmObject.realm

在不extends RealmObject ,一切正常,但是我想使用Realm轻松地将其放入数据库。 有没有一种方法可以排除RealmObject字段,而只对@Parcel使用基本的pojo字段?

@Parcel
public class Feed extends RealmObject{
    int id;
    public String text;
    public String time_created;
    String time_modified;
    int comments_count;
    int likes_count;
    String feed_type;
    int obj_id;
    String image;
    String user_name;
    String user_earthmile_points;
    boolean liked;
    boolean commented;
    boolean is_private;
    String url;
    int feed_creator_id;

   }
回答1

编辑#2 :实际上,我找到了一种使其工作:)的方法。 请参阅下面的更新的答案。

编辑#1 :尽管应用程序编译正常,但尝试实际创建带有错误的Parcel时崩溃: org.parceler.ParcelerRuntimeException: Unable to create ParcelableFactory for io.realm.FeedRealmProxy 。 境界队已经正式承认,它是目前不可能实现ParcelableRealmObject秒。 目前尚不清楚是否/何时解决。


使用Parceler v0.2.16,您可以执行以下操作:

@RealmClass      // required if using JDK 1.6 (unrelated to Parceler issue)
@Parcel(value = Parcel.Serialization.BEAN, analyze = { Feed.class })
public class Feed extends RealmObject {
    // ...
}

然后,在任何地方都使用Parcels.wrap(Feed.class, feed)而不是Parcels.wrap(feed) ,否则您的应用程序将崩溃,并出现org.parceler.ParcelerRuntimeException: Unable to create ParcelableFactory for io.realm.FeedRealmProxy

回答2

所有扩展RealmObject的类都将具有一个由注释处理器创建的匹配的RealmProxy类。 必须使包裹程序了解此类。 请注意,只有在项目至少编译一次后,该类才可用。

@Parcel(implementations = { PersonRealmProxy.class },
    value = Parcel.Serialization.BEAN,
    analyze = { Person.class })
public class Person extends RealmObject {
// ...}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Usage of parceler (@Parcel) with Realm.io (Android)
    I have the following code which produces the error: Error:Parceler: Unable to find read/write generator for type io.realm.Realm for io.realm.RealmObject.realm It was working all fine without extends RealmObject , however I want to use Realm to put to database easily. Is there a way to exlcude the RealmObject fields and just use the basic pojo fields for @Parcel? @Parcel public class Feed extends RealmObject{ int id; public String text; public String time_created; String time_modified; int comments_count; int likes_count; String feed_type; int obj_id; String image; String user_name; String user
  • 如何使自定义对象可拆分?(How can I make my custom objects Parcelable?)
    问题 我正在尝试使我的对象可包裹。 但是,我有自定义对象,这些对象具有我制作的其他自定义对象的ArrayList属性。 最好的方法是什么? 回答1 您可以在此处,此处(在此处获取代码)和此处找到一些示例。 您可以为此创建一个POJO类,但是您需要添加一些额外的代码以使其成为Parcelable 。 看一下实现。 public class Student implements Parcelable{ private String id; private String name; private String grade; // Constructor public Student(String id, String name, String grade){ this.id = id; this.name = name; this.grade = grade; } // Getter and setter methods ......... ......... // Parcelling part public Student(Parcel in){ String[] data = new String[3]; in.readStringArray(data); // the order needs to be the same as in writeToParcel() method
  • Google Maps Code中的BadParcelableException(BadParcelableException in google maps code)
    问题 运行经过稍微修改的Google Maps示例会在Google Maps代码中引发BadParcelableException 。 LatLng类是可拆分的,但找不到。 似乎Google Maps代码正在尝试取消包裹未被包裹的对象。 什么情况下有问题? package com.example.mapdemo; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import android.os.Bundle; public class RawMapViewDemoActivity extends android.support.v4.app.FragmentActivity { private MapView mMapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)
  • Proguard在Parcelable类中导致RuntimeException(解组未知类型代码)(Proguard causing RuntimeException (Unmarshalling unknown type code) in Parcelable class)
    问题 如果我离开我的应用程序并在一段时间后打开它,则会收到此异常。 我的主要活动包括一个带有三个不同片段的ViewPager。 我还在Application类中做了一些我认为与问题无关的工作。 这是例外: RuntimeException(@Parcel:readValue:2065){无法启动活动ComponentInfo {com.emu / com.emu.ActivityMain}:java.lang.RuntimeException:Parcel android.os.Parcel@419526d0:在偏移量332处解组未知类型代码2131361816 } 我在Google Analytics(分析)的用户手机上看到了很多这种例外情况。 除了readValue之后的数字和@之后的十六进制数字(在上述异常中分别为2065和419526d0)外,其他所有参数均相同。 该异常不指向任何代码行。 我对此进行了搜索,这似乎与包裹写错有关。 尽管我的MainActivity中没有包裹。 我不知道是什么原因造成的。 - - 编辑 - - - - - - - - - - - - - - - - - - - - - - - -------------------------- 我转载了例外。 当App离开主屏幕按钮,并在打开其他消耗内存的应用程序后从内存中清除时,就会发生这种情况。
  • 解组时出现ClassNotFoundException:android.support.v4.view.ViewPager $ SavedState(ClassNotFoundException when unmarshalling: android.support.v4.view.ViewPager$SavedState)
    问题 我在Android崩溃报告中看到以下错误: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v4.view.ViewPager$SavedState at android.os.Parcel.readParcelable(Parcel.java:1971) at android.os.Parcel.readValue(Parcel.java:1859) at android.os.Parcel.readSparseArrayInternal(Parcel.java:2128) at android.os.Parcel.readSparseArray(Parcel.java:1581) at android.os.Parcel.readValue(Parcel.java:1916) at android.os.Parcel.readMapInternal(Parcel.java:2099) at android.os.Bundle.unparcel(Bundle.java:223) at android.os.Bundle.getSparseParcelableArray(Bundle.java:1225) at android
  • 在哪里可以找到有关Android“服务呼叫” Shell命令的信息?(Where to find info on Android's “service call” shell command?)
    问题 使用设备上的adb shell或终端仿真器,输入此命令将清除所有通知(需要su ) service call notification 1 这将发送短信(不需要su ) service call isms 5 s16 "PhoneNumber" i32 0 i32 0 s16 "BodyText" 在哪里可以了解有关service call更多信息? 我找到了这个问题,并感谢答案对所有含义的细分。 但是,在哪里可以找到有关notification 2可能试图调用的方法的信息? 正在运行的service call不完整,并打印了此用法: Usage: service [-h|-?] service list service check SERVICE service call SERVICE CODE [i32 INT | s16 STR] ... Options: i32: Write the integer INT into the send parcel. s16: Write the UTF-16 string STR into the send parcel. 我跑service list ,并将它与我的设备包括78个服务回来isms和notification而对于大多数服务将打印的内容似乎是一个命名空间( com.android.internal.telephony
  • AIDL界面找不到Parcelable类的导入(AIDL interface can't find import for Parcelable class)
    问题 我的问题似乎与此问题相似,但有一点不同。 我正在制作库项目中的AIDL服务,并在我的应用程序中使用它。 我的应用程序中有一个类别为Vehicle的类,该类可以打包,以便可以在我的界面中使用它。 (我想从我的服务库中找到我的应用程序中的车辆清单) 在应用程序和库中都需要Vehicle.java吗? 我是否都需要Vehicle.aidl? 我在应用程序和库中都有Vehicle.java和Vehicle.aidl,我的应用程序开始遇到一个问题,当我从接口eclipse调用方法时,我希望我将其定义为库类的Vehicle而不是应用程序(尽管它们是相同的,并且都是可包裹的)。 public List<Vehicle> getVehicles(){...code... } 为了解决这个问题,我尝试在我的IRemoteInterface.aidl中使它成为应用程序的车辆类,而不是库的车辆类(在下面列出的变体中,我收到一个错误,它找不到导入。在其他变体中例如将其设置为List而没有导入,则表示返回类型未知)。 package LIBRARY; import LIBRARY.RelPoint; import LIBRARY.IRemoteServiceCallback; import LIBRARY.FleetStatus; import APPLICATION.Vehicle
  • 是否有使用Kotlin在Android中创建Parcelable数据类的便捷方法?(Is there a convenient way to create Parcelable data classes in Android with Kotlin?)
    问题 我目前在Java项目中使用了出色的AutoParcel,这有助于创建Parcelable类。 现在,我在下一个项目中考虑的Kotlin具有这种数据类的概念,它可以自动生成equals,hashCode和toString方法。 有没有一种简便的方法可以使Kotlin数据类可打包(无需手动实现方法)? 回答1 Kotlin 1.1.4已发布 Android扩展插件现在包括一个自动Parcelable实现生成器。 在主构造函数中声明序列化的属性,并添加@Parcelize批注,将自动创建writeToParcel()/ createFromParcel()方法: @Parcelize class User(val firstName: String, val lastName: String) : Parcelable 因此,您需要允许他们将其添加到模块的build.gradle中: apply plugin: 'org.jetbrains.kotlin.android.extensions' android { androidExtensions { experimental = true } } 回答2 您可以尝试以下插件: android-parcelable-intellij-plugin-kotlin 它可以帮助您为kotlin的数据类生成Android
  • 可包裹的抽象类(Abstract class as parcelable)
    问题 基本上,我的应用程序具有以下结构: 在没有抽象类ProjectItem情况下实现这种结构将很简单,但是在这种情况下,我不知道如何实现此结构。 抽象类ProjectItem需要一个CREATOR因为它应该是可打包的。 (如in.readTypedList(mProjectItems, ProjectItem.CREATOR);在构造函数Project(内部in.readTypedList(mProjectItems, ProjectItem.CREATOR);内) 但实际上,出于逻辑原因,只能在其派生类中实现CREATOR 。 那么,如何实现此结构以保持类Project拆分? 编辑 这是Project的构造函数之一: private Project(Parcel in) { in.readTypedList(mProjectItems, ProjectItem.CREATOR); } 但是正如我已经说过的, ProjectItem不必实现CREATOR 回答1 所选答案(来自evertvandenbruel的帖子)中存在错误。 当仅对一个子类进行打包时,而不是对超类对象的列表进行打包时,正确的代码必须考虑到打包。 所有其他代码都应该相同,关键是您必须在所有创建者中读取type变量(请参见下面的代码)。 否则,当尝试取消打包子类对象时,排序会出现问题 前任: package
  • Android Binder框架实现之Parcel详解之基本数据的读写
       Android Binder框架实现之Parcel详解之基本数据的读写 Android Binder框架实现目录: Android Binder框架实现之Binder的设计思想 Android Binder框架实现之何为匿名/实名Binder Android Binder框架实现之Binder中的数据结构 Android Binder框架实现之Binder相关的接口和类 Android Binder框架实现之Parcel详解之基本数据的读写 Android Binder框架实现之Parcel read/writeStrongBinder实现 Android Binder框架实现之servicemanager守护进程 Android Binder框架实现之defaultServiceManager()的实现 Android Binder框架实现之Native层addService详解之请求的发送 Android Binder框架实现之Native层addService详解之请求的处理 Android Binder框架实现之Native层addService详解之请求的反馈 Android Binder框架实现之Binder服务的消息循环 Android Binder框架实现之Native层getService详解之请求的发送 Android
  • 如何在Android中的偏移YYY处修复解组未知类型代码XXX?(How to fix Unmarshalling unknown type code XXX at offset YYY in Android?)
    问题 由于解组异常,我的履历出现了应用崩溃。 我已经检查了所有Seri​​alizables具有没有参数的构造函数,甚至检查了所有使用ObjectStream的可序列化(保存到文件并从文件加载)。 我如何理解导致异常的可拆分偏移的实际类类型: Parcel android.os.Parcel@42209460: Unmarshalling unknown type code 2131165303 at offset 3748 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2080) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105) at android.app.ActivityThread.access$600(ActivityThread.java:136) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java
  • Android中的Bundle错误的魔术数字(Bad magic number for Bundle in Android)
    问题 我使用以下代码将数据从一个活动传递到另一活动: @Override public void execute(List<Report> reports, Questions question) { Intent replyIntent = new Intent(listener, ReplyActivity.class); replyIntent.putExtra("id", 0L); replyIntent.putExtra("questions", question); listener.openReportOk(question); listener.startActivity(replyIntent); } 侦听器的回调的活动参考。 问题是这个班级: @Table(name = "Questions") public class Questions extends Entity implements Parcelable { public static final Creator<Questions> CREATOR = new Creator<Questions>() { public Questions createFromParcel(Parcel source) { return new Questions(source); } public Questions
  • 如何在Android上将对象从一项活动传递到另一项活动(How to pass an object from one activity to another on Android)
    问题 我正在尝试从一个Activity发送客户类的对象,并在另一个Activity显示它。 客户类的代码: public class Customer { private String firstName, lastName, Address; int Age; public Customer(String fname, String lname, int age, String address) { firstName = fname; lastName = lname; Age = age; Address = address; } public String printValues() { String data = null; data = "First Name :" + firstName + " Last Name :" + lastName + " Age : " + Age + " Address : " + Address; return data; } } 我想将其对象从一个Activity发送到另一个,然后在另一个Activity上显示数据。 我该如何实现? 回答1 一种选择是让您的自定义类实现Serializable接口,然后可以使用Intent#putExtra()方法的putExtra(Serializable..)变体在意图中额外传递对象实例。
  • 如何在Android中使用Parcel?(How to use Parcel in Android?)
    问题 我正在尝试使用Parcel编写,然后读回一个Parcelable 。 出于某种原因,当我从文件读回对象时,它以null的形式返回。 public void testFoo() { final Foo orig = new Foo("blah blah"); // Wrote orig to a parcel and then byte array final Parcel p1 = Parcel.obtain(); p1.writeValue(orig); final byte[] bytes = p1.marshall(); // Check to make sure that the byte array seems to contain a Parcelable assertEquals(4, bytes[0]); // Parcel.VAL_PARCELABLE // Unmarshall a Foo from that byte array final Parcel p2 = Parcel.obtain(); p2.unmarshall(bytes, 0, bytes.length); final Foo result = (Foo) p2.readValue(Foo.class.getClassLoader()); assertNotNull(result); /
  • 在Android中将Parcelables数组写入Parcel(Writing arrays of Parcelables to a Parcel in Android)
    问题 我正在尝试使用writeParcelableArray将实现Parcelable的对象数组写入Parcel。 我尝试编写的对象被定义为(如您所期望的): public class Arrival implements Parcelable { /* All the right stuff in here... this class compiles and acts fine. */ } 我正在尝试使用以下命令将它们写入“包裹”中: @Override public void writeToParcel(Parcel dest, int flags) { Arrival[] a; /* some stuff to populate "a" */ dest.writeParcelableArray(a, 0); } 当Eclipse尝试编译它时,我得到了错误: 边界不匹配:Parcel类型的通用方法writeParcelableArray(T [],int)不适用于参数(Arrival [],int)。 推断的类型Arrival不能有效替代有界参数<T扩展Parcelable> 我完全不理解此错误消息。 Parcelable是一个接口(不是类),因此您不能扩展它。 有人有主意吗? 更新:将Parcelable的ArrayList放入Intent时,我遇到了基本上相同的问题:
  • 拆组时找不到Android E / Parcel:类(仅在Samsung Tab3上)(Android E/Parcel﹕ Class not found when unmarshalling (only on Samsung Tab3))
    问题 我一直无法解决为什么会发生此错误,并且只能在运行4.4.2的Samsung Tab3设备上发生? 当我的MainActivity启动另一个Activity并按意图传递一个Parcelable类时,就会发生这种情况: private void debugTest(TestParcel cfgOptions){ TestParcel cfgOptions = new TestParcel(); cfgOptions.setValue(15); //just to verify Intent intent = new Intent(MainActivity.this, TestActivity.class); intent.putExtra("cfgOptions", cfgOptions); startActivityForResult(intent, DBG_TEST); } TestActivity获取可打包数据,如下所示: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_activity); TestParcel cfgOptions = getIntent().getExtras()
  • Android P: UsageStatsManager getAppStandbyBucket
    I want to display the current bucket of my application with a device under Android P beta. Therefore, I try to use the UsageStatsManager class like this : @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (Build.VERSION.SDK_INT >= 28) { UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(USAGE_STATS_SERVICE); if (usageStatsManager != null) { Log.d(TAG, "getAppStandbyBucket():" + usageStatsManager.getAppStandbyBucket()); } } } My Manifest possesses the permission android.permission
  • 使用自定义可打包类在Android应用中解组错误(Unmarshalling errors in Android app with custom parcelable classes)
    问题 对于我的Android应用程序,我遇到了一些无法整理的错误,尽管我认为我已经完成了通过Parcelable正确保存和加载对象所需的一切。 您能告诉我代码有什么问题吗? 错误1: java.lang.RuntimeException: Unable to start activity ComponentInfo Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@41279860: Unmarshalling unknown type code 6619241 at offset 1372 at android.os.Parcel.readValue(Parcel.java:1922) at android.os.Parcel.readMapInternal(Parcel.java:2094) at android.os.Bundle.unparcel(Bundle.java:223) at android.os.Bundle.getParcelable(Bundle.java:1158) at android.app.Activity.onCreate(Activity.java:860) at my.app.package.PlayComputer.onCreate(PlayComputer
  • 使用NetworkStatsManager获取移动数据使用历史(Getting mobile data usage history using NetworkStatsManager)
    问题 我想知道数据的使用历史,并注意到“ android” Network-6s新的NetworkStatsManager,它看起来很TrafficStats (我使用TrafficStats一段时间,但在重新启动之前不会涵盖任何内容)。 从API文档中: 注意:此API需要权限PACKAGE_USAGE_STATS,这是系统级权限,不会授予第三方应用程序。 但是,声明许可意味着要使用API​​,并且设备的用户可以通过“设置”应用程序授予许可。 配置文件所有者应用会自动被授予在其管理的配置文件上查询数据的权限(即,对于querySummaryForDevice(int,String,long,long)以外的任何查询)。 设备所有者的应用程序同样可以访问主要用户的使用情况数据。 我想了解汇总级别的数据使用情况,而不是了解使用该数据的应用程序,因此我尝试这样使用它: NetworkStatsManager service = context.getSystemService(NetworkStatsManager.class); NetworkStats.Bucket bucket = service.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, null, from, to); ... 不幸的是
  • 解组Android Intent Parcelable时找不到类(Class not found when Unmarshalling Android Intent Parcelable)
    问题 我在activities之间传递了一个ArrayList 。 在此ArrayList是由其中具有四个变量的class制成的对象。 这些变量之一是来自另一个class另一个ArrayList<object> 。 我已经实现Parcelable上都和我相当确信我已经正确地完成了parcelable方法。 错误如下: 错误: 03-18 02:37:27.063: D/dalvikvm(3249): GC_FOR_ALLOC freed 82K, 6% free 3020K/3180K, paused 1ms, total 3ms 03-18 02:37:27.093: I/dalvikvm-heap(3249): Grow heap (frag case) to 3.626MB for 635808-byte allocation 03-18 02:37:27.103: D/dalvikvm(3249): GC_FOR_ALLOC freed 5K, 5% free 3635K/3804K, paused 10ms, total 10ms 03-18 02:37:27.173: D/(3249): HostConnection::get() New Host Connection established 0xb96396c0, tid 3249 03-18 02:37:27