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'}]

このように表示されるだけでなく、特殊文字が付属しています。そして、私はそれらを避けたいです。

私にとって最善の方法は、以下のコードのようなものです (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);

おすすめは何ですか?取得できる現在の値を解析しますか? もしそうなら、どのように?また、複数の列がある場合、特殊文字の最適なアプローチは何ですか?

皆さん、ありがとうございました。

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 に答える