首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ksoap2 ClassCastException

Ksoap2 ClassCastException
EN

Stack Overflow用户
提问于 2012-08-21 23:15:45
回答 3查看 1.6K关注 0票数 1

嗨,我正在尝试建立一个应用程序,其中的数据是从网络服务检索。我正在使用KSOAP2从web服务中获取数据。数据正在从web服务的arraylist中传递。我需要将接收到的数据保存到一个新的数组列表中,但是当我尝试将对象保存到数组列表中时,我得到了ClassCastException。

下面是代码

代码语言:javascript
复制
class NetworkConnectTask extends AsyncTask<String, Void, ViewSchedule> {

    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    protected ViewSchedule doInBackground(String... urls) {
        try
        {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            request.addProperty("username",username);
            request.addProperty("startdate",currentDateString);
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.call(SOAP_ACTION,envelope);
            Object result = envelope.getResponse();

            ArrayList<String> recivedlistItems = new ArrayList<String>();
            recivedlistItems=(ArrayList<String>) result; // exception caught here


            if(!recivedlistItems.isEmpty())
            {

                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        addItems("some crap");

                    }
                });
            }
            else
            {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        addItems("No bookings");

                    }
                });
            }
        }
        catch (Exception e)
        {
            System.out.println("error");
            e.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(LoginScreen feed) {



    }

下面是我的wsdl (web服务)的代码

代码语言:javascript
复制
public synchronized ArrayList<String> View(String username, String startdate ) {

    System.out.println("\n entered the method");

    try {
        /* Create object of the Connect class */

        Connect connect = new Connect();
        /*
         * calling the Connection method of Connect class to establish a
         * database connection
         */
        Connection conn = connect.Connection();

        java.sql.PreparedStatement preparedStatement = null;
        /* Creating a query to be executed with prepared statement */
        String query = "select title,startdate,enddate from bookinginformation where username=? and startdate=?";

        preparedStatement = conn.prepareStatement(query);
        preparedStatement.setString(1, username);
        preparedStatement.setString(2, startdate);
        // stmt.executeUpdate(query);

        ResultSet rs = preparedStatement.executeQuery();

        boolean empty = true;
        while (rs.next()) {
            empty = false;
            String title =rs.getString(1);
            String S_date=rs.getString(2);
            String e_date=rs.getString(2);
            StringBuilder sb=new StringBuilder();
            String temp="";
            temp = sb.append(title).append("-").append(S_date).append("-")
                    .append(e_date).toString();
            listItems.add(temp);
            System.err.println("\n added  \n");
        }

        if (empty) {
            System.out.println("\n no data");
            //return "false";
        }
        rs.close();
        conn.close();

    } catch (Exception e) {
        e.printStackTrace();
        System.err.println("Cannot connect to database server");
        System.exit(0);
    }
    return listItems;


}

下面是错误

代码语言:javascript
复制
java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive
at com.example.androidfrontend.ViewSchedule$NetworkConnectTask.doInBackground(ViewSchedule.java:162)
at com.example.androidfrontend.ViewSchedule$NetworkConnectTask.doInBackground(ViewSchedule.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-22 04:47:13

对Swayam的代码稍作修改对我来说是有效的。

代码语言:javascript
复制
SoapObject result=(SoapObject)envelope.bodyIn;
            int childCount = result.getPropertyCount();

            int i;
            for (i = 0; i < childCount; i++) {
                String temp= result.getProperty(i).toString();
                recivedlistItems.add(temp);
            }
票数 0
EN

Stack Overflow用户

发布于 2012-08-21 23:22:24

代码语言:javascript
复制
recivedlistItems=(ArrayList<String>) result; // wrong code

result是一个Object,而您正试图转换为一个String。也因此出现了例外。

试试这段代码。

代码语言:javascript
复制
            SoapObject result = (SoapObject) envelope.getResponse(); 
            int childCount = result.getPropertyCount();

            int i;
            for (i = 0; i < childCount; i++) {
                recivedlistItems.add(result.getProperty(i).toString()); //**edited** after Srikanth pointed it out
            }
票数 1
EN

Stack Overflow用户

发布于 2012-08-21 23:18:22

我不知道什么会返回envelope.getResponse();,但我看到您将其存储在Object中。

然后,您将尝试将其转换为ArrayList<String>。这是行不通的,对象不是ArrayList。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12058055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档