如何通过PHP将数据从PostgreSQL发送到Android?
我正在开发一个Android应用程序,其中包括与PostgreSQL数据库的通信(启动和下载)。我想使用PHP脚本从数据库中检索数据 表名为“table”,其列为“id”、“username”和“title” 在一个非常简单的情况下(表中只有一个条目),这对我很有用:如何通过PHP将数据从PostgreSQL发送到Android?,php,android,postgresql,Php,Android,Postgresql,我正在开发一个Android应用程序,其中包括与PostgreSQL数据库的通信(启动和下载)。我想使用PHP脚本从数据库中检索数据 表名为“table”,其列为“id”、“username”和“title” 在一个非常简单的情况下(表中只有一个条目),这对我很有用: $statement = $pdo->prepare("SELECT * FROM table"); $result = $statement->execute(); $fetched= $statement->
$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。老实说,我也不太明白$row在这种情况下到底扮演什么角色
你知道问题出在哪里吗
非常感谢你的帮助
编辑:我得到一个空结果意味着,一旦我第一次尝试从Android Studio中的输入流访问返回值,我就会得到一个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)
代码的问题是您只调用了一次,而不是在循环中调用它(每行一次),如下所示:
另一个选项是使用,可能使用
PDO::FETCH_CLASS
,并立即完成$echo
数组对象。RTFM:从与PDOStatement对象关联的结果集中提取一行。
一行数据。一个单独的行,而不是整个结果集<代码>while($row=$result->fetch())将按顺序获取所有行。嗯,这是真的,谢谢您的提示。但是它仍然应该返回第一行数据并且不为null,对吗?我将代码更改为您推荐的代码,但返回值仍然为null。编码的数组看起来像{“result”:null}
?或者根本没有json?第一次尝试访问输入流结果时,我得到一个NullPointerException。首先,我不确定错误是否在Android java部分,但由于第一个版本只获取第一行数据,这不太可能。我在最初的帖子中添加了错误信息。我挖得更深一点,我会相信这确实是Android代码的问题。我正在一个异步任务中执行对php服务器的请求。在我的doInBackground方法中,创建了一个显然会引起问题的InputStream。我找到了几个关于这个的话题。有人能确认接收到的json对象的大小和未正确加载的inputStream之间可能存在连接吗?考虑到它是异步的,可能有一些原因。非常感谢$result->fetch()导致异常,而$statement->fetch()允许返回我需要的内容。这是一个帮助我继续前进的答案。
$statement = $pdo->prepare("SELECT id, username, title FROM table");
$statement->execute();
$echo = array();
while ($row = $statement->fetch()) {
$row_array = array();
$row_array['id'] = $row['id'];
$row_array['username'] = $row['username'];
$row_array['title'] = $row['title'];
array_push($echo, $row_array);
}
$statement = null;
echo json_encode(array("result"=>$echo);