Мне нужно отправить некоторые параметры в мой веб-сервис и получить результат. Я использовал ksoap2-андроид-сборочно-2,4-банку-с-dependencies.jar в Lib, мой веб-сервис будет работать должным образом:ksoap2 AsyncTask PropertyInfo не получена в webservice, почему?
[WebMethod]
public string TestParams(string userName, string password, string startRowIndex, string maximumRows, string OrderType, string IdOpera)
{
return userName + " - " + password + " - " + startRowIndex + " - " + maximumRows + " - " + OrderType + " - " + IdOpera;
}
В основном коде Java:
private class AsyncCall extends AsyncTask<String, Void, SoapObject > {
@Override
protected SoapObject doInBackground(String... params) {
if (Constants.DEBUG)Log.i(Constants.LOGTAG, "doInBackground");
AsynGetSellList list = new AsynGetSellList();
AsynGetSellList.setMAIN_REQUEST_URL(MAIN_REQUEST_URL);
AsynGetSellList.setMETHOD_NAME(METHOD_NAME);
AsynGetSellList.setNAMESPACE(NAMESPACE);
AsynGetSellList.setSOAP_ACTION(SOAP_ACTION);
javab = list.GetSellList(1);
return javab;
}
@Override
protected void onPreExecute() {
if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onPreExecute");
pDialog = new ProgressDialog(SellList.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected void onProgressUpdate(Void... values) {
if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onProgressUpdate");
}
@Override
protected void onPostExecute(SoapObject javab) {
if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onPostExecute");
pDialog.dismiss();
if (isCancelled()) {
finish();
}
if (javab!=null){
fillSells(javab);
}
}
}
и GetSellList.java которые включают в себя Params:
public SoapObject GetSellList(int startRowIndex) {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
// افزودن پارامترهای فراخوانی
request.addProperty("userName", "01395175");
request.addProperty("password", "123123");
request.addProperty("startRowIndex", "1");
request.addProperty("maximumRows", "50");
request.addProperty("OrderType", "1");
request.addProperty("IdOpera", "50");
if (Constants.DEBUG)Log.i(Constants.LOGTAG,"request = "+request);
//پاکت ساخته شده است
SoapSerializationEnvelope envelope = getSoapSerializationEnvelope(request);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = getHttpTransportSE(MAIN_REQUEST_URL);
SoapObject javab = null;
try {
if (Constants.DEBUG)Log.i(Constants.LOGTAG,"envelope = "+envelope);
//فراخوانی وب سرویس با پاکت
androidHttpTransport.call(SOAP_ACTION, envelope);
//دریافت پاسخ از وب سرویس
// SoapObject result = (SoapObject)envelope.getResponse();
Object result0 = (Object)envelope.getResponse();
if (Constants.DEBUG)Log.i(Constants.LOGTAG,"result0 = "+result0);
SoapObject result = (SoapObject)result0;
if (Constants.DEBUG)Log.i(Constants.LOGTAG,"result = "+result);
javab = findTable(result);
} catch (Exception e) {
if (Constants.DEBUG)Log.i(Constants.LOGTAG,"Exception = "+e);
if (Constants.DEBUG)Log.i(Constants.LOGTAG,"Exception = "+e.getMessage());
e.printStackTrace();
}
return javab;
}
другие части кода необходимы:
public PropertyInfo addParam(String name, Object value) {
PropertyInfo propertyInfo = new PropertyInfo();
propertyInfo.name = name;
propertyInfo.type = value == null ? PropertyInfo.OBJECT_CLASS : value.getClass();
propertyInfo.setValue(value);
return propertyInfo;
}
private final static SoapSerializationEnvelope getSoapSerializationEnvelope(SoapObject request) {
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.setAddAdornments(false);
envelope.setOutputSoapObject(request);
return envelope;
}
, что я вижу, когда я проверяю отправить Params в LogCat:
TestParams{userName=01395175; password=password; ...}
, но проблема: result0 = - - - - -
это означает, что (для меня), что веб-сервис не получил Params. Я испытал много способов, но у вас есть достаточно опыта, чтобы знать, что является проблемой? позвольте мне сначала сказать, что проверить сеть и изменить многие способы, так что если вы видели или сталкивались с той же проблемой, дайте мне знать ... Спасибо.
Я имел этот вопрос несколько недель назад. Являются ли ваши параметры userName, password, startRowIndex и т. Д. Именованными точно такими же (включая кадры) в качестве ваших параметров в вашем веб-сервисе? Это была моя проблема. Я передавал имя пользователя параметру «имя пользователя», когда мой веб-сервис ожидал параметра «userName». –