2016-08-22 3 views
0

Я делаю excersice, чтобы понять, как работает Realm. Пример состоит из двух классов модели. Один называется 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(); 
} 
} 

Ответ я получаю:

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 

Я использую версию 1.2.0 Realm.

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 
    } 

Любые идеи, что может быть неправильным?

Thanks,

Theo.

+0

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

+0

Просто интересно, почему задача не распространяется на объект realmobject? –

+1

В соответствии с документацией вы должны добавить аннотацию '@ RealmClass' для классов, реализующих' RealmModel'. – Michael

ответ

1

для того, чтобы процессор аннотаций работать на вашей модели классов Realm, у вас есть два варианта:

1.)

public class Thing extends RealmObject { 

2.)

@RealmClass 
public class Thing implements RealmModel { 

Если вы посмотрите на источник для RealmObject, он также начинается следующим образом:

@RealmClass 
public abstract class RealmObject implements RealmModel { 
+0

Я использовал эту аннотацию, но теперь я получаю это: вызвано: java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String theo.testing.reamtutorial2.model.Task.getTitle()' в ссылке на нулевой объект – Theo

+0

Объект по-прежнему не сохраняется :( – Theo

+0

ok исправлена ​​проблема. Спасибо за помощь: 0 – Theo

Смежные вопросы