获取android

时间:2015-08-25 17:01:29

标签: php android mysql json

我使用这些代码获取服务器上文件夹的文件列表:

<?php
 if ($handle = opendir('.pic')) {
   while (false !== ($file = readdir($handle))) {
          if ($file != "." && $file != "..") {
            //$thelist = $thelist.$file.'<br>';
            $thelist = $thelist.$file."\r\n";
          }
       }
  closedir($handle);
  }
 echo $thelist;
?>

它工作正常,但我需要用json数组获取文件名,对于mysql我用这些代码来获取json数组:

$result = mysql_query("SELECT *FROM wall ORDER BY id DESC") or die(mysql_error());
if (mysql_num_rows($result) > 0) {
    $response["products"] = array();
    while ($row = mysql_fetch_array($result)) {
        $product = array();
        $product["name"] = $row["name"];
        array_push($response["products"], $product);
    }
    $response["success"] = 1;
echo json_encode($response);

但我不知道如何更改它以使用json数组获取文件名,就像mysql一样。

更新: 我试试这些代码:

<?php
 $thelist = array();
 if ($handle = opendir('.pic')) {
   while (false !== ($file = readdir($handle))) {
          if ($file != "." && $file != "..") {
            $thelist[] = $file;
          }
       }
  closedir($handle);
  }
 echo json_encode($thelist);

在android中我尝试用这些代码获取json:

List<NameValuePair> params = new ArrayList<NameValuePair>();
            JSONObject json = jParser.getJSONFromUrl(url_all_products, params);
            Log.d("All Products: ", json.toString());

我在logcat中有这个错误:

解析数据时出错org.json.JSONException:org.json.JSONArray类型的值[]无法转换为JSONObject

所以有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

我更喜欢使用glob()来获取文件夹中的文件(和/或文件夹)列表。

首先,您应该初始化一个数组,然后再附加到该数组。

以下是我的解决方案:

<?php
$list = []; // Since 5.4.x you can use shorthand syntax to init an array
$dir = dirname(__FILE__); // Just to get the path to current dir

// glob returns an array with the files it found matching the search pattern (* = wildcard)
$files = glob($dir."/.pic/*");

// Looping through all the files found in ./.pic
foreach ($files as $file) {
    // Removing the full path and appending the file to the $list array.
    // Now it will look like ".pic/filename.ext"
    $list[] = str_replace($dir."/", "", $file); 
}
echo json_encode($list, JSON_PRETTY_PRINT); // JSON_PRETTY_PRINT for beautifying the output
?>

在旁注上,glob()可以采取更多选项,您可以在php manual (glob)

中详细了解它

建议更新nr 1 这个json的输出将是一个json数组,正如错误消息所说的那样。解决方案可以是将JSONObject json更改为JSONArray json

另一方面,您可以通过在代码中进行一些小调整来使PHP脚本的输出成为json对象而不是数组。

而不是echo json_encode($list, JSON_PRETTY_PRINT);,只需将$list添加到另一个数组中,如下所示:
echo json_encode(['files' => $list], JSON_PRETTY_PRINT);

这将使解析器将其视为json对象,因为该数组具有字符串键(files)而不是索引键(0, 1, ..., n

答案 1 :(得分:0)

创建一个文件名数组,json_encode:

<?php
 $thelist = array();
 if ($handle = opendir('.pic')) {
   while (false !== ($file = readdir($handle))) {
          if ($file != "." && $file != "..") {
            $thelist[] = $file;
          }
       }
  closedir($handle);
  }
 echo json_encode($thelist);