从领域上的多对一关系获取getter上的NullPointerException

时间:2017-06-15 03:50:09

标签: java android realm relationship one-to-many

我正在创建一个笔记记录应用,每个笔记都包含一系列任务。我使用领域在每个笔记上为其各自的任务创建一对多的关系。每次我尝试向笔记添加任务时,它都会给我一个空指针异常,错误指向此处:

Set<String> myStrSet = new HashSet<String>();
Set<String> duplicateSet = new HashSet<String>();

         for(String str : myArrayList){
             if(myStrSet.contains(str)){
                  duplicateSet.add(str);
             } else {
                  myStrSet.add(str);
             }
         }

         for(String str : duplicateSet){
             myStrSet.remove(str);
         }

         for(String str : myStrSet){
             System.out.println("Print non-duplicate elements : " + str);
         }

以下是活动的完整代码,包括上面的代码:

note.getTaskItems().add(t);

堆栈追踪:

public class TaskActivity extends AppCompatActivity implements TaskAdapter.IconClick {
RecyclerView recview;
TaskAdapter adapter;
ArrayList<TaskItem> listData;
Realm trealm;
EditText edtTask;
TaskItem taskItem;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TaskMainBinding binding = DataBindingUtil.setContentView(this, R.layout.task_main);

    trealm.getDefaultInstance();

    //RecyclerView
    final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    recview = (RecyclerView) findViewById(R.id.task_rec);
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recview.setLayoutManager(layoutManager);


    //Realm
    Realm.init(getApplicationContext());

    //TaskRealmHelper helper = new TaskRealmHelper(trealm);
    listData = retrieve();

    adapter = new TaskAdapter(this, listData);
    recview.setAdapter(adapter);



    binding.fbtn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            displayInputDialog();
        }
    });
}

private void displayInputDialog() {
    Dialog d = new Dialog(this);
    d.setTitle("save to realm");
    d.setContentView(R.layout.dialog_box);

    edtTask = (EditText) d.findViewById(R.id.edtTask);
    Button btn1 = (Button) d.findViewById(R.id.btn1);

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //get
                //TaskItem t = new TaskItem();
                //t.setTasks(edtTask.getText().toString());
            //save
            save(edtTask.getText().toString());
            edtTask.setText("");
            //refresh
            //listData = retrieve();
            adapter = new TaskAdapter(TaskActivity.this, listData);
            recview.setAdapter(adapter);
            //adapter.notifyDataSetChanged();
        }
    });
    d.show();
}

public void save(final String input) {
    trealm = Realm.getDefaultInstance();
    trealm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            //taskItem = realm.createObject(TaskItem.class,UUID.randomUUID().toString());
            TaskItem t = new TaskItem();
            t.setTaskid(UUID.randomUUID().toString());
            t.setTasks(input);
            //t = realm.copyToRealmOrUpdate(t);
            NoteItem note = trealm.where(NoteItem.class)
                    .equalTo("Noteid", getIntent().getExtras().getString("taskid"))
                    .findFirst();
            listData.add(t);
            note.getTaskItems().add(t);
        }
    });
}

public ArrayList<TaskItem> retrieve()
{
    trealm = Realm.getDefaultInstance();
    ArrayList<TaskItem> tasks = new ArrayList<>();

    RealmQuery<NoteItem> q = trealm.where(NoteItem.class);
    if(tasks.size()>0)
    {
        q = q.equalTo("id", getIntent().getExtras().getString("taskid"));
    }

    RealmResults<TaskItem> item = trealm.where(TaskItem.class)
            //.equalTo("taskid","id")
            .findAllAsync();

    for (TaskItem t : item)
    {
        tasks.add(t);
        //note.getTaskItems().add(t);
    }
    return tasks;
}

0 个答案:

没有答案