0

I'm working on implementing the cache for my project and using Room and don't know what is the problem, I used that for another model and its worked fine but for the complex model, its be compile error.

Cause: longcannot be converted to an Element

Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: longcannot be converted to an Element
at com.sun.tools.javac.main.Main.compile(Main.java:553)
at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:48)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:35)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:98)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:51)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:37)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:35)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilationFinalizer.execute(IncrementalCompilationFinalizer.java:39)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilationFinalizer.execute(IncrementalCompilationFinalizer.java:24)
at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:207)
at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:133)
at com.android.build.gradle.tasks.factory.AndroidJavaCompile.compile(AndroidJavaCompile.java:125)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)

I also read this too .There was a lot of error at first about id and it said you using same name in your database, beacause i have nested object in my model like Inviter and it has id too.

Thread model

@Entity
public class Thread {
@ColumnInfo(name = "thread_id")
@PrimaryKey
private long id;
private long joinDate;
@Embedded
private Inviter inviter;
@Embedded
private LastMessageVO lastMessageVO;
@ColumnInfo(name = "thread_title")
private String title;
@TypeConverters(DataTypeConverter.class)
private List<Participant> participants;
private long time;
private String lastMessage;
private String lastParticipantName;
private boolean group;
private long partner;
@ColumnInfo(name = "thread_image")
private String image;
private long unreadCount;
private long lastSeenMessageId;
private long partnerLastMessageId;
private long partnerLastSeenMessageId;
private long partnerLastDeliveredMessageId;
private int type;
private boolean mute;
private String metadata;
private boolean canEditInfo;
private long participantCount;

Inviter model

public class Inviter {
@ColumnInfo(name = "Inviter_id")
private long id;
private String name;
private String firstName;
private String lastName;
private long notSeenDuration;

LastMessageVO

 @ColumnInfo(name = "lastMessageVO_id")
private long id;
private String uniqueId;
private String message;
private boolean edited;
private boolean editable;
@ColumnInfo(name = "lastMessageVO_time")
private long time;
@Embedded
private Participant participant;
@Embedded
private ReplyInfoVO replyInfoVO;
@Embedded
private ForwardInfo forwardInfo;

My dao class

@Dao
public interface MessageDao {

@Insert(onConflict = REPLACE)
void insertContact(Contact t);

@Insert(onConflict = REPLACE)
void insertContact(List<Contact> t);

@Query("select * from Contact")
List<Contact> getContact();

@Query("select * from Thread")
List<Thread> getThread();

@Insert(onConflict = REPLACE)
void insertThread(List<Thread> threads);
}
Adnan Abdollah Zaki
  • 4,328
  • 6
  • 52
  • 58
Sina Rahimi
  • 323
  • 1
  • 3
  • 13

1 Answers1

0

The answer is about you couldn't save the object to the room and you have to ignore it and then save the nested object in another way. And because I had long param in that nested object its said longcannot be converted to an Element. I use this and my problem solved.

Sina Rahimi
  • 323
  • 1
  • 3
  • 13