【问题标题】:Realm.getInstance(context) throws Annotation processor may not have been executedRealm.getInstance(context) throws 注解处理器可能没有被执行
【发布时间】:2015-03-02 21:42:04
【问题描述】:

当尝试获取 Realm 实例时,我遇到了以下异常 -

io.realm.exceptions.RealmException: Could not find the generated io.realm.HallOfFameHolderRealmProxy class: Annotation processor may not have been executed.

我的班级代码是 -

@RealmClass

公共类 HallOfFameHolder 扩展 RealmObject {

private static final String TAG = "HallOfFameHolder";

private int mId;
private String mTrackName;
private Date mDateTime;
private String mTimeStr;
private String mDateStr;
private long mTotalRunTime;
private String mTotalRunTimeStr;
private int mNumOfLaps;
private long mBestLapTime;
private String mBestLapTimeStr;
private boolean mDryTrack;
private float mGearRatio;
private int mSrJetting;

@Ignore
private int mSessionId;

public void setData(String trackName, Date dateTime, String timeStr,
        String dateStr, long totalRunTime, String totalRunTimeStr,
        int numOfLaps, long bestLapTime, String bestLapTimeStr,
        boolean dryTrack, float gearRatio, int srJetting) {
    Log.d(TAG, "setData");
    mTrackName = trackName;
    mDateTime = dateTime;
    mTimeStr = timeStr;
    mDateStr = dateStr;
    mTotalRunTime = totalRunTime;
    mTotalRunTimeStr = totalRunTimeStr;
    mNumOfLaps = numOfLaps;
    mBestLapTime = bestLapTime;
    mBestLapTimeStr = bestLapTimeStr;
    mDryTrack = dryTrack;
    mGearRatio = gearRatio;
    mSrJetting = srJetting;
}

public void setData(int id, String trackName, Date dateTime,
        String timeStr, String dateStr, long totalRunTime,
        String totalRunTimeStr, int numOfLaps, long bestLapTime,
        String bestLapTimeStr, boolean dryTrack, float gearRatio,
        int srJetting) {
    Log.d(TAG, "setData");
    mTrackName = trackName;
    mDateTime = dateTime;
    mTimeStr = timeStr;
    mDateStr = dateStr;
    mTotalRunTime = totalRunTime;
    mTotalRunTimeStr = totalRunTimeStr;
    mNumOfLaps = numOfLaps;
    mBestLapTime = bestLapTime;
    mBestLapTimeStr = bestLapTimeStr;
    mDryTrack = dryTrack;
    mGearRatio = gearRatio;
    mSrJetting = srJetting;
    mId = id;
}   

public int getmId() {
    return mId;
}

public void setmId(int mId) {
    this.mId = mId;
}

public String getmTrackName() {
    return mTrackName;
}

public void setmTrackName(String mTrackName) {
    this.mTrackName = mTrackName;
}

public Date getmDateTime() {
    return mDateTime;
}

public void setmDateTime(Date mDateTime) {
    this.mDateTime = mDateTime;
}

public String getmTimeStr() {
    return mTimeStr;
}

public void setmTimeStr(String mTimeStr) {
    this.mTimeStr = mTimeStr;
}

public String getmDateStr() {
    return mDateStr;
}

public void setmDateStr(String mDateStr) {
    this.mDateStr = mDateStr;
}

public long getmTotalRunTime() {
    return mTotalRunTime;
}

public void setmTotalRunTime(long mTotalRunTime) {
    this.mTotalRunTime = mTotalRunTime;
}

public String getmTotalRunTimeStr() {
    return mTotalRunTimeStr;
}

public void setmTotalRunTimeStr(String mTotalRunTimeStr) {
    this.mTotalRunTimeStr = mTotalRunTimeStr;
}

public int getmNumOfLaps() {
    return mNumOfLaps;
}

public void setmNumOfLaps(int mNumOfLaps) {
    this.mNumOfLaps = mNumOfLaps;
}

public long getmBestLapTime() {
    return mBestLapTime;
}

public void setmBestLapTime(long mBestLapTime) {
    this.mBestLapTime = mBestLapTime;
}

public String getmBestLapTimeStr() {
    return mBestLapTimeStr;
}

public void setmBestLapTimeStr(String mBestLapTimeStr) {
    this.mBestLapTimeStr = mBestLapTimeStr;
}

public boolean ismDryTrack() {
    return mDryTrack;
}

public void setmDryTrack(boolean mDryTrack) {
    this.mDryTrack = mDryTrack;
}

public float getmGearRatio() {
    return mGearRatio;
}

public void setmGearRatio(float mGearRatio) {
    this.mGearRatio = mGearRatio;
}

public int getmSrJetting() {
    return mSrJetting;
}

public void setmSrJetting(int mSrJetting) {
    this.mSrJetting = mSrJetting;
}


// DO NOT Delete the next 2 methods
public int getmSessionId() {
    return mSessionId;
}

public void setmSessionId(int sessionId) {
    mSessionId = sessionId;
}   

}

我正在使用 Eclipse 和 realm-0.78.0.jar。 如何解决?

【问题讨论】:

  • 你使用的是什么版本的JVM?将@RealmClass 注解添加到模型类有帮助吗?
  • 我正在使用:java 版本“1.8.0_31”Java(TM) SE 运行时环境(构建 1.8.0_31-b13)Java HotSpot(TM) 64 位服务器 VM(构建 25.31-b07,混合模式)并使用 - @RealmClass public class HallOfFameHolder extends RealmObject {
  • 您的 setData 方法应该使注释处理器失败。你有构建过程的日志吗?
  • setData(...) 方法应该有什么注解?
  • setter 不应该有任何数据,但是如果有任何 setter 不与字段关联,则注释处理器应该会失败。

标签: android eclipse exception annotations realm


【解决方案1】:

我相信这与Proguard有关http://realm.io/docs/java/0.80.0/

ProGuard
Realm generates a proxy class for each RealmObject at compile time. To ensure that these classes can be found after running an obufuscation and static analysis tool like ProGuard add the configuration below to your ProGuard configuration file.

-keepnames public class * extends io.realm.RealmObject
-keep class io.realm.** { *; }
-dontwarn javax.**
-dontwarn io.realm.**

进行这些更改是否可以解决问题?

【讨论】:

  • 嗯...我最初尝试在我的项目中实现 Realm 时遇到了很多问题。真正帮助我的是使最简单的 RealmObject 子类成为可能,然后慢慢添加东西它符合我的规格。这对我弄清楚 Realm 的怪癖有很大帮助。该文档仍然缺少很多(这是预期的,因为它仍处于测试阶段)。祝你好运!
【解决方案2】:

您正在模型类中定义自定义方法 (setData),Realm 目前不支持该方法。我们正在研究如何在不允许开发者自取其辱的同时允许这样做。

【讨论】:

    猜你喜欢
    • 2023-01-19
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2014-10-25
    • 2016-05-21
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多