1

I've tried pass object between activities exactly like in How to pass an object from one activity to another on Android

and SerializableTask is creating correctly but when I want to read this in next activity it is null.

    Task task = listOfTask.get(position);
    Log.i(TAG, "recyclerViewEditTask: edit clicked for title: " +
                                        task.getTitle());
    SerializabledTask sTask = new SerializabledTask(task.getTitle(),
        task.getDetails(), task.getTimeToDo(), task.getTag(),
        task.getId(), task.isDone());
    if(sTask == null)
        Log.e(TAG, "recyclerViewEditTask: sTask IS NULL");
    else {
        Log.i(TAG, "recyclerViewEditTask: sTaskInfo: " + sTask.toString());
        Intent editIntent = new Intent(ListOfTasksActivity.this, EditTaskActivity.class);
        editIntent.putExtra("task", sTask);
        startActivity(editIntent);

then it goes to another activity

activity that try to get Serializable object:

Intent i = getIntent();
SerializabledTask sTask = (SerializabledTask) i.getSerializableExtra("task");
if(sTask == null)
    Log.e(TAG, "onCreate: sTASK IS NULL" );

and "onCreate: sTASK IS NULL" is calling

when I tried to pass single String it works properly

Serializables class:

public class SerializabledTask implements Serializable {

String title, details, timeToDo, tag;
int id;
boolean done;
Task task;

public SerializabledTask(String title, String details, String timeToDo, String tag, int id, boolean done) {
    this.title = title;
    this.details = details;
    this.timeToDo = timeToDo;
    this.tag = tag;
    this.id = id;
    this.done = done;
}

public String getTitle() {
    return title;
}

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

public String getDetails() {
    return details;
}

public void setDetails(String details) {
    this.details = details;
}

public String getTimeToDo() {
    return timeToDo;
}

public void setTimeToDo(String timeToDo) {
    this.timeToDo = timeToDo;
}

public String getTag() {
    return tag;
}

public void setTag(String tag) {
    this.tag = tag;
}

public int getId() {
    return id;
}

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

public boolean isDone() {
    return done;
}

public void setDone(boolean done) {
    this.done = done;
}

public Task getTask() {
    return task;
}

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

@Override
public String toString() {
    return "SerializabledTask{" +
            "title='" + title + '\'' +
            ", details='" + details + '\'' +
            ", timeToDo='" + timeToDo + '\'' +
            ", tag='" + tag + '\'' +
            ", id=" + id +
            ", done=" + done +
            ", task=" + task +
            '}';
}
Community
  • 1
  • 1
Rafał
  • 572
  • 4
  • 21
  • what is your Task class, post code? does it implement serializable? – Amrut Bidri Jan 30 '17 at 12:32
  • Task is simple class that contain "title", "details", "timeToDo", "tag" - String, "id" - Int, "done" - boolean. It also have getters to these attributes and toString method. But I think it doesn't matter because Task is assigning from recycler view properly, SerializabledTask is assigning properly and It has value that Task has. Problem is in reading SerializabledTask in another activity. – Rafał Jan 30 '17 at 12:36
  • it means you are implementing `Serializable` to `SerializableTask` class. And that class has an object of `Task` class. right? – Amrut Bidri Jan 30 '17 at 12:41
  • @AmrutBidri I edited my question and pasted my whole SerializabledTask – Rafał Jan 30 '17 at 12:49
  • add this code to it, `private void writeObject(java.io.ObjectOutputStream out) throws IOException { out.writeObject(task); } private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { task= (Task) in.readObject(); }` – Amrut Bidri Jan 30 '17 at 12:55

1 Answers1

0

Your model class SerializableTask must implement Serializable for your code to work.

public class SerializableTask implements Serializable {
...
}

Also it's highly recommended to use Parcelable instead of Serializable, because it's a lot faster. Source : http://www.developerphil.com/parcelable-vs-serializable/

Hristo Stoyanov
  • 1,960
  • 1
  • 12
  • 24
  • my SerializableTask implements Serializable exactly like in question that I linked in very begginig of my question – Rafał Jan 30 '17 at 12:38