我正在尝试从 PHP 中的 SOAP 获取信息,并在这篇文章Android SOAP wsdl的帮助下完成了该任务。虽然,我希望您向我解释一些事情并给我一个更好的选择。
目前,我的 PHP 代码是:
$query = $db->prepare("SELECT name FROM `oc_category_description`");
$query->execute();
$result = $query->get_result();
$all = array();
while($row = $result->fetch_array(MYSQL_ASSOC)){
$all[] = array_map('utf8_encode', $row);
}
return json_encode($all);
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
exit();
在 Java Android 中,我是这样读的:
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);
Object response = (Object) envelope.getResponse();
String strRet = response.ToString();
TextView txt = (TextView)findViewById(R.id.textView1);
txt.setText(strRet);
使用此代码,我可以检索信息,但这不是最好的方法,信息类似于以下示例:
[{'name':'Google'},{'name':'ol\u00f3'},{'name':'yahoo'}]
除了以这种方式显示之外,它还带有特殊字符。我想避免它们。
对我来说,最好的方法是类似于下面的代码(我在谷歌上看到了这个例子):
SoapObject response = (SoapObject) envelope.getProperty(0);
因此我会得到一个数组列表(长度等),我可以更好地管理这些项目。
虽然,我已经尝试过该解决方案并给了我错误:
9-27 07:30:40.094: W/System.err(3171): java.lang.ClassCastException: java.lang.String 不能转换为 org.ksoap2.serialization.SoapObject
我确实相信问题可能出在我的 PHP 上,所以我目前正在尝试但没有成功:
$query = $db->prepare("SELECT name FROM `oc_category_description`");
$query->execute();
$query->bind_result($name);
$query->store_result();
$all = array();
while($query->fetch()){
$all[] = array('nome' => $row);
}
$query->close();
$db->close();
return json_encode($all);
你有什么建议吗?解析我能得到的当前值?如果是这样,怎么做?如果我有超过 1 列,那么特殊字符的最佳方法是什么?
谢谢你们。