4

我正在发送一个实现 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。

我正在尝试将一个对象从一个 Activity 传递给另一个。

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 的另一个问题,但这没有帮助;)顺便说一句:不,ParseFile 是Parse 开发人员的课程

4

5 回答 5

1

我猜应该是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();
}
}
于 2013-09-06T13:04:06.933 回答
1

你可以bundle用来传递数据

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

并使用检索

Intent intent = getIntent();
Bundle bundle = intent.getExtras();
myObject = (MyObject)bundle.getSerializable("MyObject");
于 2013-09-06T13:10:32.410 回答
0

我认为您的 MyObject 并不是真正可序列化的。为了序列化一个类,你需要两个条件:

  • 实现 Serializable 接口
  • 所有成员都必须是可序列化的

我怀疑 ParseFile 是可序列化的,所以这不起作用

于 2013-09-06T13:04:37.770 回答
0

这是我用来在 Activity 之间传递 Object 类的代码:

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);

希望它会帮助你。快乐编码:)

于 2013-09-06T13:14:11.290 回答
0
public class MyObject extends ParseObject implements Serializable {

如果ParseObject你的课在这里?如果是的话,试试吧serializable。还要检查一些 android 对象是不是serializable忽略那些使用transient.

也使用intent.putSerializable("MyObject", myObject);intent.gettSerializable("MyObject");

于 2013-09-06T13:18:10.310 回答