【发布时间】:2014-04-19 17:04:03
【问题描述】:
我需要向我的网络服务发送一些参数并获得结果。我在 lib 中使用了 ksoap2-android-assembly-2.4-jar-with-dependencies.jar,我的 Web 服务工作正常:
[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 :
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;
}
我在 logcat 中检查发送参数时看到的内容:
TestParams{userName=01395175; password=password; ...}
但问题是:result0 = - - - - -
这意味着(对我来说)网络服务没有收到参数。
我已经测试了很多方法,但是你有足够的经验知道什么是问题吗?让我先告诉你,检查网站并改变了很多方式,所以如果你看到或遇到同样的问题,请告诉我......谢谢。
【问题讨论】:
-
几周前我遇到了这个问题。您的参数用户名、密码、startRowIndex 等名称是否与您的 Web 服务中的参数完全相同(包括大写字母)?那是我的问题,当我的网络服务需要参数“userName”时,我将用户名传递给参数“username”。
标签: java web-services android-asynctask ksoap propertyinfo