나는 Android 장치에서 soap webservice를 호출해야합니다. stackoverflow 및 다른 페이지에서 비디오를 보는 많은 기사를 읽었습니다 ...하지만 난 everythin 시도하고 내 안드로이드 장치에서 작동하도록 만들 수 없습니다 및 에뮬레이터에서 테스트 할 수 없습니다. 내 컴퓨터가 그 중 어떤 것도 처리 할 수 없기 때문에 오류가 코드에 있는지 또는 내 안드로이드 장치의 문제인지는 알 수 없습니다.android에서 soap webservice를 호출하십시오.
레이아웃 XML은 EditText, Button 및 TextView입니다. 당신은 내가 웹 서비스에 보낼 필요가 요청 XML을 볼 수있는 링크에서
(I는 SOAP 1.1 또는 SOAP 1.2을 사용한다?)를 http://www.webservicex.net/globalweather.asmx?op=GetCitiesByCountry이 내 실제 코드이고, 나는 많은 다른 방법을 시도 , 그리고 그들 중 누구도 나를 위해 일한 적이 없다. 어떤 도움이 필요합니까? (URL, 네임 스페이스, soap_action 및 METHOD_NAME 값은 그들이 좋아요되지 않습니다입니까?)
package com.example.doazdoas.webservice_prueba;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.os.AsyncTask;
import android.widget.Toast;
import static android.content.ContentValues.TAG;
public class MainActivity extends Activity{
private TextView textResult;
private Button buttonSend;
String NAMESPACE = "http://www.webserviceX.NET/";
String METHOD_NAME = "GetCitiesByCountry";
String SOAP_ACTION = NAMESPACE + METHOD_NAME;
String URL = "http://www.webservicex.net/globalweather.asmx?WSDL";
private Object resultsRequestSOAP = null;
HttpTransportSE androidHttpTransport;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textResult = (TextView)findViewById(R.id.textResultado);
buttonSend = (Button)findViewById(R.id.buttonEnviar);
//setContentView(tv);
}
public void onClickEnviar(View view){
AsyncCallWS task = new AsyncCallWS();
task.execute();
}
private class AsyncCallWS extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute");
}
@Override
protected Void doInBackground(Void... params) {
Log.i(TAG, "doInBackground");
sendRequest();
return null;
}
@Override
protected void onPostExecute(Void result) {
Log.i(TAG, "onPostExecute");
Log.d("dump Request: " ,androidHttpTransport.requestDump);
Log.d("dump response: " ,androidHttpTransport.responseDump);
}
}
public void sendRequest(){
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
//SoapObject
request.addProperty("@CountryName", "SPAIN");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
androidHttpTransport = new HttpTransportSE(URL);
try
{
androidHttpTransport.call(SOAP_ACTION, envelope);
resultsRequestSOAP = envelope.getResponse();
String[] results = (String[]) resultsRequestSOAP;
textResult.setText(results[0]);
}
catch (Exception aE)
{
aE.printStackTrace();
}
}
}
'NAMESPACE'의 끝 부분으로'/ '를 없애고'SOAP_ACTION = NAMESPACE + "/"+ METHOD_NAME;을 변경하십시오. – DaveNOTDavid