私はAndroidとPHPでいくつかの実験を行っています.モバイルデバイスは、HTTP POST
PHPへのメソッドを介していくつかのコードを投稿するクライアントです. 次のコードを使用しています。
URL url = new URL(host + webapp + syncURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Accept-Charset", "UTF-8");
con.setFixedLengthStreamingMode(postParams.getBytes().length);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
con.setDoOutput(true);
//send the POST out
PrintWriter out = new PrintWriter(con.getOutputStream());
out.print(postParams);
out.close();
変数postParams
は次の形式です。
Parámetros: hora=22%3A15%3A02&precision=25.1520004272461&fecha=2013-09-18&data=%5B%22S%C3%AD%22%5D
元のデータはhora=22:15:02,precision=25.1520004272461,fecha=2013-09-18
、data=["Sí"]
キー値としてMap
オブジェクトに保存されます。
Map を変換する postParams
には、次のコードを使用します。
StringBuilder parametersAsQueryString = new StringBuilder();
try {
if (parameters != null) {
boolean firstParameter = true;
for (String parameterName : parameters.keySet()) {
if (!firstParameter) {
parametersAsQueryString.append(PARAMETER_DELIMITER);
}
Log.d(LOG_TAG, "Parámetro: " + parameterName + ", value: " + parameters.get(parameterName));
// Agregamos el nombre del parámetro
parametersAsQueryString.append(parameterName).append(PARAMETER_EQUALS_CHAR);
// Agregamos el valor del parámetro
try {
parametersAsQueryString
.append(URLEncoder.encode(parameters.get(parameterName), "UTF-8"));
} catch(NullPointerException npe) {
parametersAsQueryString
.append(URLEncoder.encode("", "UTF-8"));
}
firstParameter = false;
}
}
} catch (UnsupportedEncodingException uee) {
Log.d(LOG_TAG, "Error: " + uee);
ただし、データベース内のデータでは として表示され["SÃ"]
ます。データベースはPostgreSQL
encoding のデータベースUTF-8
なので、そこに問題があるとは思いません。誰かが私を助けることができますか?前もって感謝します。