Я пытаюсь получить информацию из SOAP в PHP, и я достиг этой задачи с помощью этого сообщения 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'}]
Помимо того, что он показан таким образом, он поставляется со специальными символами. И я хочу их избежать.
Для меня лучшим способом будет что-то вроде кода ниже (я вижу эти примеры по всему Google):
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);
в$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 столбца, и какой лучший подход для специальных символов?
Спасибо вам всем.
Мне удалось заставить это работать следующим образом:
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, если у кого-то есть какое-то решение, я ценю.