Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过PHP将数据从PostgreSQL发送到Android?_Php_Android_Postgresql - Fatal编程技术网

如何通过PHP将数据从PostgreSQL发送到Android?

如何通过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->

我正在开发一个Android应用程序,其中包括与PostgreSQL数据库的通信(启动和下载)。我想使用PHP脚本从数据库中检索数据

表名为“table”,其列为“id”、“username”和“title”

在一个非常简单的情况下(表中只有一个条目),这对我很有用:

$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);