私はPostgreSQLデータベースとの通信(アップとダウンロード)を含むAndroidアプリケーションに取り組んでいます。 PHPスクリプトを使用してデータベースからデータを取得したい。PostgreSQLからPHP経由でAndroidにデータを送信するには?
テーブル名は "table"で、カラムは "id"、 "username"、 "title"です。非常に単純なケース(表中の1個のエントリ)で
、これは私の作品:
$statement = $pdo->prepare("SELECT * FROM table");
$result = $statement->execute();
$fetched= $statement->fetch();
$echo = array();
array_push($echo,array(
"id"=>$fetched['id'],
"username"=>$fetched['username'],
"title"=>$fetched['title']
));
echo json_encode(array("result"=>$echo);
アンドロイドで
データ受信が
JSONObject ob = new JSONObject(response);
で動作し、私はデータを読み取ることができますJSONオブジェクトとして扱います。
しかし、テーブルから複数のエントリを取得する必要がある場合もあります。私は多くのチュートリアルを読みましたが、それらのすべてにはさまざまなアプローチがあります。私は以下を試した:
$statement = $pdo->prepare("SELECT * FROM table");
$result = $statement->execute();
$fetched= $statement->fetch();
$echo = array();
while ($row = $fetched) {
$row_array['id'] = $row['id'];
$row_array['username'] = $row['username'];
$row_array['title'] = $row['title'];
array_push($echo, $row_array);
}
echo json_encode(array("result"=>$echo);
しかし、この方法は常にnullを返します。正直言って、$行の役割がどういうものなのか正確にはわかりません。
問題の原因は何ですか?
ありがとうございました!
編集:nullの結果が出ると、初めてAndroidスタジオの入力ストリームから戻り値にアクセスしようとすると、NullPointerExceptionが発生します。 エラーは次のようになります。
08-26 17:17:16.605 5278-5278 E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.sainz.example.RandomActivity$1LoginAsync.onPostExecute(RandomActivity.java:101)
at com.example.sainz.example.RandomActivity$1LoginAsync.onPostExecute(RandomActivity.java:40)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)
RTFM [fetch()](http://php.net/manual/en/pdostatement.fetch.php): 'PDOStatementオブジェクトに関連付けられた結果セットから行を取得します。 '** ROW **のデータ。 1つの単独の行であり、結果セット全体ではありません。 'while($ row = $ result-> fetch())'はすべての行を順番に取得します。 –
ええ、それは本当です、ヒントのおかげで。しかし、それはまだデータの最初の行を返す必要があり、nullではない、そうですか?コードを推奨するものに変更しましたが、戻り値はまだnullです。戻り値は – s4inz
です。あなたのエンコードされた配列は '{" result ":null}'のように見えますか?またはあなたは全くのjsonを得ない? –