我正在尝试从Android应用程序调用web服务。
将可序列化对象Person
从我的Android应用程序传递给调用Web服务。并且在服务器端我正在使用这个可序列化的对象并在那里进行一些修改。
但问题是在执行我的Android应用程序时,它显示的异常如下:java.lang.RuntimeException: Cannot serialize: com.test.android.Person@43950fe0
我对解决这个问题一无所知。双方都使用可序列化对象来设置和获取参数。
以下是使用
的人员类public class Person implements Serializable{
private String firstName;
private String lastame;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastame() {
return lastame;
}
public void setLastame(String lastame) {
this.lastame = lastame;
}
}
我在android端的webservice imlpementation类:
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("person", person);
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
如果将可序列化对象作为参数传递,则会在此行androidHttpTransport.call(SOAP_ACTION, envelope);
中收到错误,但如果param是普通对象(如String),则int等不会遇到任何问题。
任何人都可以告诉我如何解决这个问题。
答案 0 :(得分:1)
即使没有任何操作,也必须添加默认构造函数。否则,它将不被视为可序列化
代码:
public class Person implements Serializable{
private String firstName;
private String lastame;
private Person() {}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastame() {
return lastame;
}
public void setLastame(String lastame) {
this.lastame = lastame;
}
}
答案 1 :(得分:0)
如果你想有效地使用可序列化的界面,遵循好方法非常重要,这里展示了一个很好的例子: http://www.jondev.net/articles/Android_Serialization_Example_(Java)
实施它时要严谨是非常重要的。
祝你好运!如果您想要更好的响应,则需要显示更多代码。在这里,你的班级很好被序列化,但这取决于你如何制作它! 编辑:确实阿德尔,好点!编辑2:这似乎与此处的问题相同:
答案 2 :(得分:0)