2016-08-22 4 views
0

렐름의 작동 방식을 이해하기 위해 수 표를 작성 중입니다. 이 예제에는 두 개의 모델 클래스가 있습니다. 하나는 User라고하고 다른 하나는 Task라고합니다. 따라서 각 사용자는 동일한 작업을 수행하게됩니다.렐름 데이터베이스에 오브젝트가 저장되지 않았습니다.

다음 두 모델 클래스가 있습니다.

public class User extends RealmObject { 

@PrimaryKey 
private String id; 
private String firstName; 
private String lastName; 
private Task task; 
private RealmList<Task> tasks; 


public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

public Task getTask() { 
    return task; 
} 

public void setTask(Task task) { 
    this.task = task; 
} 

public RealmList<Task> getTasks() { 
    return tasks; 
} 

public void setTasks(RealmList<Task> tasks) { 
    this.tasks = tasks; 
} 
} 

public class Task implements RealmModel, Comparable<Task> { 

@PrimaryKey 
private String id; 
private String title; 
private String description; 
private boolean isCompleted; 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

@Override 
public int compareTo(Task another) { 
    return 0; 
} 

public boolean isCompleted() { 
    return isCompleted; 
} 

public void setCompleted(boolean completed) { 
    isCompleted = completed; 
    } 
} 

지금 내 주요 조각에 내 데이터베이스에 해당 객체를 저장하기 위해 노력하고 있습니다.

public class MainFragment extends Fragment { 

private static final String TAG = MainFragment.class.getSimpleName(); 

private Realm realm; 

public MainFragment() { 
} 

public static MainFragment newInstance() { 
    Bundle args = new Bundle(); 
    MainFragment fragment = new MainFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_main, container, false); 
    return v; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    realm = Realm.getDefaultInstance(); 

    realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      // Only create a user if we don't have one. 
      if (realm.where(User.class).count() == 0) { 
       User u = realm.createObject(User.class); 
       u.setFirstName("Theo"); 
       u.setLastName("Tziomakas"); 
       u.setId(UUID.randomUUID().toString()); 
      } 
     } 
    }); 
    realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      User u = realm.where(User.class).findFirst(); 
      Task t = realm.createObject(Task.class); 
      t.setTitle("Test Task"); 
      t.setDescription("Foo Bar"); 
      u.getTasks().add(t); 
     } 
    }); 

    User u = realm.where(User.class).findFirst(); 
    Log.d(TAG, u.getTask().getTitle()); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    realm.close(); 
} 
} 

내가 얻을 응답은 다음과 같습니다 제가 1.2.0 영역 버전을 사용하고

C:\Users\Theo\AndroidStudioProjects\ReamTutorial2\app\build\generated\source\apt\debug\io\realm\UserRealmProxy.java 
    Error:(349, 66) error: cannot find symbol variable TaskRealmProxy 
    Error:(183, 17) error: cannot find symbol variable TaskRealmProxy 
    Error:(338, 65) error: cannot find symbol variable TaskRealmProxy 
    Error:(187, 17) error: cannot find symbol variable TaskRealmProxy 
    Error:(471, 75) error: cannot find symbol variable TaskRealmProxy 
    Error:(400, 70) error: cannot find symbol variable TaskRealmProxy 
    Error:(390, 69) error: cannot find symbol variable TaskRealmProxy 

.

buildscript { 
repositories { 
    jcenter() 
    } 
dependencies { 
    classpath 'com.android.tools.build:gradle:2.1.3' 
    classpath "io.realm:realm-gradle-plugin:1.2.0" 

    // NOTE: Do not place your application dependencies here; they belong 
    // in the individual module build.gradle files 
    } 
} 

    allprojects { 
    repositories { 
    jcenter() 
    } 


    } 

    task clean(type: Delete) { 
    delete rootProject.buildDir 
    } 

어떤 아이디어가 잘못되었을 수 있습니까?

감사합니다,

테오.

1)

public class Thing extends RealmObject { 

2)

@RealmClass 
public class Thing implements RealmModel { 

:

당신의 영역 모델 클래스에 작업 할 수있는 주석 프로세서 위해서는
+0

https://github.com/realm/realm-java/issues/964 –

+0

왜 태스크가 실제 오브젝트를 확장하지 않는지 궁금하십니까? –

+1

문서에 따르면'RealmModel'을 구현하는 클래스에 대해'@ RealmClass' 주석을 추가해야합니다. – Michael

답변

1

두 가지 옵션이 있습니다 RealmObject의 소스를 보면 다음과 같이 시작됩니다.

@RealmClass 
public abstract class RealmObject implements RealmModel { 
+0

그 주석을 사용했으나 이제는 다음과 같이 나타납니다. 원인 : java.lang.NullPointerException : null 객체 참조에 가상 메소드 'java.lang.String theo.testing.reamtutorial2.model.Task.getTitle()'을 호출하려고 시도했습니다. – Theo

+0

개체가 여전히 저장되지 않습니다. ( – Theo

+0

ok 문제가 해결되었습니다. 도움에 감사드립니다 : 0 – Theo

관련 문제