Передача аргумента между действиями – null

Я отправляю объект своего пользовательского класса, который реализует Serializable:

public class MyObject extends ParseObject implements Serializable { private static final long serialVersionUID = 1L; public MyObject() { } public String getTitle() { return getString("title"); } public void setTitle(String title) { put("title", title); } public ParseFile getParseFile() { return getParseFile("file"); } public void setParseFile(ParseFile file) { put("file", file); } } 

Класс содержит atm одну строку и один ParseFile.

Я пытаюсь передать объект из одного действия в другое.

 private void editMyObject(MyObject myObject) { Intent intent = new Intent(AActivity.this, BActivity.class); intent.putExtra("MyObject", myObject); Toast.makeText(getApplicationContext(), "OUT: "+myObject.getTitle(), Toast.LENGTH_SHORT).show(); // here i get the content, proper string startActivity(intent); } 

И в деятельности «приемника»:

 protected void onCreate(Bundle savedInstanceState) { ... Intent intent = getIntent(); myObject = (MyObject)intent.getSerializableExtra("MyObject"); if (myObject != null) { editText.setText(myObject.getTitle()); } Toast.makeText(getApplicationContext(), "IN: "+myObject.getTitle(), Toast.LENGTH_SHORT).show(); // here is null } 

Что я делаю не так..? Я пошел по другим вопросам по SOF, но это не помогло;) BTW: Нет, ParseFile – это класс от разработчиков Parse

    Я предполагаю, что это должно быть что-то вроде этого ParsObject реализует Serializable, потому что согласно теме о Serializable, если класс Super не сериализуется, состояние экземпляра не поддерживается. Поэтому попробуйте сделать класс ParseObject Serializable и увидеть результат

    Попробуйте что-то подобное

     public class MyObject implements Serializable { private ParseObject parseObject; public MyObject() { parseObject = new ParseObject(); } public String getTitle() { return parseObject.getString("title"); } public void setTitle(String title) { parseObject.put("title", title); } public ParseFile getParseFile() { return parseObject.getParseFile("file"); } public void setParseFile(ParseFile file) { parseObject.put("file", file); } private void writeObject(java.io.ObjectOutputStream stream) throws IOException { stream.writeObject(parseObject); } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { parseObject = (ParseObject) stream.readObject(); } } 

    Вы можете использовать bundle для передачи данных

     Bundle bundle = new Bundle(); bundle.putSerializable("MyObject", myObject); intent.putExtras(bundle); 

    И извлечение с использованием

     Intent intent = getIntent(); Bundle bundle = intent.getExtras(); myObject = (MyObject)bundle.getSerializable("MyObject"); 

    Я думаю, что ваш MyObject не является Serializable. Для сериализации класса вам необходимо 2 условия:

    • Реализовать интерфейс Serializable
    • Все участники должны быть Serializable

    Я сомневаюсь, что ParseFile сериализуем, так что это не работает

    Вот мой код, который я использую, чтобы передать класс Object между Activity:

     public class ClassName extends Activity{ static ClassName2 abc_obj; public ClassName(ClassName2 a_b_c){ abc_obj = a_b_c; } @Override public void onCreate(Bundle savedInstanceState) { // here you can access everything of class ClassName2 } } 

    // теперь вот код для передачи класса Abc классу ClassName:

     ClassName2 objAbc = new ClassName2(); //update ClassName2 according to you ClassName x_y_z = new ClassName(objAbc); Intent intent = new Intent(this, x_y_z.getClass()); startActivity(intent); 

    Надеюсь, это поможет вам. Счастливое кодирование 🙂

     public class MyObject extends ParseObject implements Serializable { 

    Здесь, если ParseObject – ваш класс? Если да, попробуйте сделать его serializable . Также проверьте, что некоторые из объектов Android не являются serializable чтобы игнорировать те, которые используют transient .

    Также используйте intent.putSerializable("MyObject", myObject); И intent.gettSerializable("MyObject");