2013-08-06 1 views
1

Android 활동에서 WSDL에 정의 된 웹 서비스에 액세스하려고합니다. 예상되는 출력은 json 형식의 문자열입니다. 첫 번째 단계는 Android에서 텍스트보기에이 문자열을 인쇄하는 것입니다. 그래서 나는 다음 코드를 사용 :Android에서 SOAP 기반 웹 서비스에 액세스 할 때 ClassCastException이 발생합니다.

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; 
} 
} 

하지만이 코드를 실행하려고 해요 때 나는 다음 로그 고양이의 오류 (및 텍스트보기없이 출력)을 볼 수 있습니다 여기에

java.lang.ClassCastException: java.util.Vector 

가있다 로그 아웃 완료 :

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) 

어떤 오류가있을 수 있습니까? 내가 여기 붙어서 도와 줘.

미리 감사드립니다.

+0

있어 결과 내가 코드를 시도이

 SoapPrimitive response = (SoapPrimitive) envelope .getResponse(); 

 SoapObject response=(SoapObject) envelope.bodyIn; 

으로 교체 아래

시도 56 MainActivity.java? – Raghunandan

+0

아래에서 해보고 작동하지 않는 경우 알려주십시오. – Raghunandan

+0

감사합니다. 문제를 해결했습니다. – Grant

답변

2

라인은 무엇인가이 내가

enter image description here

+0

Yah 맞습니다. 정중하게 노력해 주셔서 대단히 감사합니다. – Grant

+1

@ 그랜트 (Grant) 당신을 환영하고 기쁘게 생각합니다. – Raghunandan

1

잘못된 형식을 캐스팅하려고하면 ClassCastException이 throw됩니다. 예를 들어, ArrayList v가 있다고 가정 해 봅시다. String s=(String)v을 수행하면 ArrayList를 String으로 변환 할 수 없으므로 예외가 발생합니다. 이 경우, 수행중인 캐스팅은 SoapPrimitive response = (SoapPrimitive) envelope .getResponse();입니다. 즉, envelope.getResponse()SoapPrimitive.을 반환하지 않습니다. 오류 메시지에 따라 java.util.Vector을 반환합니다.

나는 당신이 사용하고있는 라이브러리를 전혀 사용하지 않았기 때문에 확실한 대답을 드릴 수는 없습니다. 그러나 Google에서 envelope.getResponse() ClassCastException은 나에게 많은 결과를 제공합니다. 그것을 시도하고 행운을 빌어 요!

+0

그게 오류 였어. 도서관이 ksoap2 – Grant

관련 문제