[英]ClassCastException when accessing SOAP based web service from Android
我正在嘗試從Android活動訪問WSDL中定義的Web服務。 預期的輸出是json格式的字符串。 在第一步,我的目標是將此字符串打印到Android中的文本視圖。 所以我使用了以下代碼:
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private final String NAMESPACE = "XXXXXXXXXXXXXXX";
private final String URL = "XXXXXXXXXXXXXXXXX";
private final String SOAP_ACTION = "XXXXXXXXXXXX";
private final String METHOD_NAME = "XXXXXXXXXXXXXXXXX";
private String webResponse = "";
private TextView textView;
private Thread thread;
private Handler handler = new Handler();
/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView1);
startWebAccess();
}
public void startWebAccess() {
thread = new Thread() {
public void run() {
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(
URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope
.getResponse();
webResponse = response.toString();
Log.d("TAG", webResponse);
}
catch (Exception e) {
e.printStackTrace();
}
handler.post(createUI);
}
};
thread.start();
}
final Runnable createUI = new Runnable() {
public void run() {
Log.d("TAG", webResponse);
textView.setText(webResponse);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
但是當我嘗試運行代碼時,我可以在log cat中看到以下錯誤(並且在Text視圖中沒有輸出):
java.lang.ClassCastException: java.util.Vector
這是完整的log log out:
08-06 09:57:11.792: D/dalvikvm(953): GC_FOR_MALLOC freed 771 objects / 322464 bytes in 130ms
08-06 09:57:13.252: D/dalvikvm(953): GC_FOR_MALLOC freed 3182 objects / 473904 bytes in 41ms
08-06 09:57:13.252: D/NativeCrypto(953): Freeing OpenSSL session
08-06 09:57:13.293: W/System.err(953): java.lang.ClassCastException: java.util.Vector
08-06 09:57:13.293: W/System.err(953): at org.sahana.peoplelocator.MainActivity$2.run(MainActivity.java:56)
可能是什么錯誤? 請幫幫我,我被困在這里。
先感謝您!
試試下面的內容
替換它
SoapPrimitive response = (SoapPrimitive) envelope
.getResponse();
通過
SoapObject response=(SoapObject) envelope.bodyIn;
我嘗試了你的代碼,這是我得到的結果
嘗試轉換無效類型時拋出ClassCastException。 例如,假設您有一個ArrayList v。如果您執行String s=(String)v
,它將拋出異常,因為您無法將ArrayList轉換為String。 在這種情況下,你正在做的唯一一個是SoapPrimitive response = (SoapPrimitive) envelope .getResponse();
這意味着envelope.getResponse()
不返回SoapPrimitive.
它可能會返回一個java.util.Vector
,基於錯誤消息。
我從來沒有使用過你正在使用的任何庫,所以我不能給你一個明確的答案。 但是,google上的envelope.getResponse() ClassCastException
給了我很多結果。 試試吧,祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.