java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive 不能转换为 org.ksoap2.serialization.SoapObject

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18892434/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 11:59:39  来源:igfitidea点击:

java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject

javaandroidandroid-layoutksoap2

提问by user2648752

I am doing soap parsing in android .These are the following steps I take while doing parsing 1) I am download ksoap2-android-assembly-2.4-jar-with-dependencies (1).jar. 2) Then I used this in this code But I am getting this error .

我正在 android 中进行肥皂解析。这些是我在解析时采取的以下步骤 1) 我正在下载ksoap2-android-assembly-2.4-jar-with-dependencies (1).jar。2)然后我在这段代码中使用了它但是我收到了这个错误。

**java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject**

Here is my code.

这是我的代码。

 package com.example.networkconnectivity;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class MainActivity extends Activity {
    private static final String SOAP_ACTION = "http://wsendpoints.bbrailapps.firstgroup.com/getVersion";
    private static final String METHOD_NAME = "getVersion";
    private static final String NAMESPACE = "http://wsendpoints.bbrailapps.firstgroup.com";
    private static final String URL = "http://railapps.firstgroup.com/FirstGroupRailApps/services/RailAppsCAWS?wsdl";
    private SoapObject resultRequestSOAP = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("=====================" + haveNetworkConnection());

        new AsyncTask<Void, Void, String>() {
            ProgressDialog dialog = new ProgressDialog(MainActivity.this);

            protected void onPreExecute() {
                dialog.show();
            };

            protected String doInBackground(Void[] params) {

                resultRequestSOAP = new SoapObject(NAMESPACE, METHOD_NAME);

                SoapSerializationEnvelope envp = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
                envp.dotNet = true;
                envp.setOutputSoapObject(resultRequestSOAP);
                AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(
                        URL);
                try {
                    androidHttpTransport.call(SOAP_ACTION, envp);
                    SoapPrimitive resultsString = (SoapPrimitive)envp.getResponse();
                    return resultRequestSOAP.toString();    

                } catch (Exception e) {
                    Log.i("WS Error->", e.toString());
                    return e.toString();
                }


            };

            protected void onPostExecute(String result) {
                dialog.dismiss();
                Toast.makeText(MainActivity.this,
                        "Check Network connectivety" + result,
                        Toast.LENGTH_LONG).show();
            };
        }.execute();

    }

    public boolean haveNetworkConnection() {
        boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;

        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                    haveConnectedWifi = true;
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                if (ni.isConnected())
                    haveConnectedMobile = true;
        }
        return haveConnectedWifi || haveConnectedMobile;
    }

}

回答by Harish Godara

The exception is on :

例外是:

resultRequestSOAP = (SoapObject) envp.getResponse();

Because you can't cast the response get form SoapSerializationEnvelopeinto SoapObject

因为您不能将响应形式SoapSerializationEnvelope转换为SoapObject

回答by Gene

Change this: SoapPrimitive resultsString = (SoapPrimitive)envp.getResponse();

改变这个: SoapPrimitive resultsString = (SoapPrimitive)envp.getResponse();

to

SoapObject resultsString = (SoapObject) envp.getResponse();

SoapObject resultsString = (SoapObject) envp.getResponse();

回答by Amol Suryawanshi

if your web method returns json response as json array then use

SoapObject result= (SoapObject) envelop.getResponse();

if your web method returns json response as primitive data then use

SoapPrimitive results = (SoapPrimitive)envelop.getResponse();

so for your code use

SoapObject result= (SoapObject) envelop.getResponse();