0

我正在尝试从 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 列,那么特殊字符的最佳方法是什么?

谢谢你们。

4

1 回答 1

0

我设法以这种方式工作:

String strRet = response.toString();
String[] lines = strRet.split(",");
List<String> array_cat = new ArrayList<String>()

 for(int i = 0; i <= lines.length - 1; i++){
    String cat = lines[i].substring(10, lines[i].length() - 2);
    array_cat.add(cat);
}

但是我仍然遇到编码问题。我知道问题来自 PHP,如果有人有任何解决方案,我将不胜感激。

于 2013-09-27T15:51:19.837 回答