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
java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject
提问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 SoapSerializationEnvelope
into 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();