Java Android无法序列化错误

Java Android无法序列化错误,java,android,serialization,android-ksoap2,ksoap,Java,Android,Serialization,Android Ksoap2,Ksoap,我正在做一个使用android调用web服务的项目。为此,我使用了ksoap2。 我创建了一个我自己的数据类型(仅供尝试),其中包含两个字符串变量。是这样的 public class MyType { String fName; String lName; public MyType(String s1,String s2){ fName = s1; lName = s2; } } 我在两端创建了这个数据类型(web服务端和an

我正在做一个使用android调用web服务的项目。为此,我使用了
ksoap2
。 我创建了一个我自己的数据类型(仅供尝试),其中包含两个字符串变量。是这样的

public class MyType {
    String fName;
    String lName;

    public MyType(String s1,String s2){
        fName = s1;
        lName = s2;
    }
}
我在两端创建了这个数据类型(web服务端和android应用程序端)。我编写了一个程序来调用web服务,然后使用我的数据类型连接给定的字符串

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.os.AsyncTask;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

    public final static String URL = "http://192.168.69.1:8080/WebApplication4/MyWebService?wsdl";
    public static final String NAMESPACE = "http://mywebservice.android.com/";
    public static final String SOAP_ACTION_PREFIX = "/";
    private static final String METHOD = "objectMethod";
    private TextView textView;

    MyType mt = new MyType("Upul","Tharanga");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.test);
        AsyncTaskRunner runner = new AsyncTaskRunner(mt);
        runner.execute();
    }

    private class AsyncTaskRunner extends AsyncTask<Integer, String, String> {

        private String resp;
        MyType a;

        public AsyncTaskRunner(MyType a){
            this.a = a;
        }

        @Override
        protected String doInBackground(Integer... params) {
            publishProgress("Loading contents..."); // Calls onProgressUpdate()
            try {
                // SoapEnvelop.VER11 is SOAP Version 1.1 constant
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                SoapObject request = new SoapObject(NAMESPACE, METHOD);

                PropertyInfo pi1=new PropertyInfo();
                pi1.setType(String.class);
                pi1.setName("parameter");
                pi1.setValue(a);
                request.addProperty(pi1);

                envelope.bodyOut = request;
                HttpTransportSE transport = new HttpTransportSE(URL);
                try {
                    transport.call(NAMESPACE + SOAP_ACTION_PREFIX + METHOD, envelope);
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                }
                //bodyIn is the body object received with this envelope
                if (envelope.bodyIn != null) {
                    //getProperty() Returns a specific property at a certain index.
                    //SoapPrimitive resultSOAP = (SoapPrimitive) ((SoapObject) envelope.bodyIn).getProperty(0);
                    //Object resultSOAP = (SoapPrimitive)((SoapObject) envelope.bodyIn).getProperty(0);
                    Object resultSOAP = (SoapPrimitive)((SoapObject) envelope.bodyIn).getProperty(0);
                    resp=resultSOAP.toString();
                }
            } catch (Exception e) {
                e.printStackTrace();
                resp = e.getMessage();
            }
            return resp;
        }

        /**
         * 
         * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
         */
        @Override
        protected void onPostExecute(String result) {
            // execution of result of Long time consuming operation
            // In this example it is the return value from the web service
            textView.setText(result);
        }

        /**
         * 
         * @see android.os.AsyncTask#onPreExecute()
         */
        @Override
        protected void onPreExecute() {
            // Things to be done before execution of long running operation. For
            // example showing ProgessDialog
        }
        /**
         * 
         * @see android.os.AsyncTask#onProgressUpdate(Progress[])
         */
        @Override
        protected void onProgressUpdate(String... text) {
            textView.setText(text[0]);
            // Things to be done while execution of long running operation is in
            // progress. For example updating ProgessDialog
        }
    }


}
导入android.support.v7.app.ActionBarActivity;
导入android.os.Bundle;
导入java.io.IOException;
导入org.ksoap2.SoapEnvelope;
导入org.ksoap2.serialization.PropertyInfo;
导入org.ksoap2.serialization.SoapObject;
导入org.ksoap2.serialization.SoapPrimitive;
导入org.ksoap2.serialization.SoapSerializationEnvelope;
导入org.ksoap2.transport.HttpTransportSE;
导入org.xmlpull.v1.XmlPullParserException;
导入android.os.AsyncTask;
导入android.widget.TextView;
公共类MainActivity扩展了ActionBarActivity{
公共最终静态字符串URL=”http://192.168.69.1:8080/WebApplication4/MyWebService?wsdl";
公共静态最终字符串命名空间=”http://mywebservice.android.com/";
公共静态最终字符串SOAP_ACTION_PREFIX=“/”;
私有静态最终字符串方法=“objectMethod”;
私有文本视图文本视图;
MyType mt=新的MyType(“Upul”、“Tharanga”);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(textView)findViewById(R.id.test);
AsyncTaskRunner=新的AsyncTaskRunner(mt);
runner.execute();
}
私有类AsyncTaskRunner扩展了AsyncTask{
私有字符串resp;
MyType a;
公共异步TaskRunner(MyType a){
这个a=a;
}
@凌驾
受保护字符串doInBackground(整数…参数){
publishProgress(“加载内容…”);//调用onProgressUpdate()
试一试{
//SOAPEnvelope.VER11是SOAP版本1.1常量
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
SoapObject请求=新的SoapObject(名称空间、方法);
PropertyInfo pi1=新的PropertyInfo();
pi1.setType(String.class);
pi1.设置名称(“参数”);
pi1.设定值(a);
请求。添加属性(pi1);
envelope.bodyOut=请求;
HttpTransportSE传输=新的HttpTransportSE(URL);
试一试{
调用(名称空间+SOAP\u操作\u前缀+方法,信封);
}捕获(IOE异常){
e、 printStackTrace();
}catch(XMLPullParseRexE){
e、 printStackTrace();
}
//bodyIn是使用此信封接收的body对象
if(envelope.bodyIn!=null){
//getProperty()返回特定索引处的特定属性。
//SoapPrimitive结果SOAP=(SoapPrimitive)((SoapObject)envelope.bodyIn).getProperty(0);
//对象结果SOAP=(SoapPrimitive)((SoapObject)envelope.bodyIn).getProperty(0);
对象结果SOAP=(SoapPrimitive)((SoapObject)envelope.bodyIn).getProperty(0);
resp=resultSOAP.toString();
}
}捕获(例外e){
e、 printStackTrace();
resp=e.getMessage();
}
返回响应;
}
/**
* 
*@see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@凌驾
受保护的void onPostExecute(字符串结果){
//执行耗时较长的操作的结果
//在本例中,它是来自web服务的返回值
setText(结果);
}
/**
* 
*@see android.os.AsyncTask#onPreExecute()
*/
@凌驾
受保护的void onPreExecute(){
//在执行长时间运行的操作之前要做的事情
//显示ProgesDialog的示例
}
/**
* 
*@请参阅android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@凌驾
受保护的void onProgressUpdate(字符串…文本){
textView.setText(text[0]);
//在执行长时间运行的操作时要做的事情
//进度。例如更新ProgesDialog
}
}
}
我的web服务所做的是将MyType参数作为输入,连接这两个给定字符串并返回连接的字符串。 当我运行android应用程序时,我收到一个错误(我想是运行时错误),说无法序列化MyType。
有什么解决问题的建议吗

尝试实现可序列化的

public class MyType implements Serializable {
    String fName;
    String lName;

    public MyType(String s1,String s2){
        fName = s1;
        lName = s2;
    }
}