Web サーバーに保存されている MySQL データベースからユーザー データを取得する Android アプリの作成に取り組んでいます。データベースに接続できるようにする HTTP Post に関するチュートリアルをいくつか読んだことがあります。ただし、php から送信されるデータを処理できません。
私が受け取ったエラーは次のとおりです: org.apache.http.MalformedChunkCodingException: チャンク ストリームが予期せず終了しました。
これは私が書いたコードです:
String name = username.getText().toString(); //username is a TextView field
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("user",name));
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(location);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
Log.e("log_tag", "Error in http connection"+e.toString());
}
//Convert response to string
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.i("log_tag", result);
}
catch(Exception e)
{
Toast.makeText(getBaseContext(),e.toString() ,Toast.LENGTH_LONG).show();
Log.e("log_tag", e.toString());
}
エラーは、文字列セクションへの変換応答に表示されるようです。受け取ったものと同様のエラーに関するいくつかの問題を調べましたが、読んだ内容はあまり役に立たないようでした。または、http クライアントのコーディングについて十分に知らないだけです...おそらく後者です。どんな助けでも大歓迎です、ありがとう!
ここにもPHPがあります:
<?php
$con = mysqli_connect("/**connection*/");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: ".mysqli_connect_error();
}
$result = mysqli_query($con, "SELECT * FROM userNames WHERE user='".$_POST['name']."')";
if ($result == NULL)
{
die();
}
else
{
//TODO:get row to java
$rows = array();
while($r = mysql_fetch_assoc($result))
{
$rows[] = $r;
}
print json_encode($rows);
mysql_close();
}
mysqli_close($con);
} ?>
これの最終目標は、データベースからの JSON 応答を個別の変数に変換することです。バッファリングされたリーダーは、JSON 変換の前の中間ステップにすぎません。繰り返しますが、チュートリアルに従っただけなので、これについて別の方法を知っている人がいれば、提案を受け付けています。