【问题标题】:How to convert JSON array to Java String array如何将 JSON 数组转换为 Java 字符串数组
【发布时间】:2017-08-13 09:09:39
【问题描述】:

我有一个 php 文件,它从特定列中获取所有行。然后将结果放入一个数组中,然后进行 json_encoded。当我 Toast php 文件的输出时,它会显示一个具有正确值的 JSON 字符串。我需要将其转换为 Java 字符串数组,以便通过单击按钮一一进行迭代。
我在这里尝试了多种解决方案,但无济于事,因此我们将不胜感激!

getImage.php

$sql = "SELECT advert_File_Path FROM Ads";
$result = $mysql_con->query($sql) or die('Query problem: '.mysqli_error($mysql_con));

//create array
$resultarray = array();

while($row = mysqli_fetch_assoc($result)){
    $resultarray[] = $row;
}
echo json_encode($resultarray);

MainActivity.java(仅相关代码)

 private void loadNextAdvert()
{
    Toast.makeText(this, "Please wait, image may take a few seconds to load...", Toast.LENGTH_LONG).show();

    dbhelper = (DbHelper) new DbHelper(new DbHelper.AsyncResponse() {
        @Override
        public void processFinish(String output) {
            if(output.equalsIgnoreCase("exception") || output.equalsIgnoreCase("unsuccessful")){
                Toast.makeText(MainActivity.this, "Connection error", Toast.LENGTH_SHORT).show();
            }else{
                //initializes ArrayList
                stringList = new ArrayList<>();
                try {
                    //initializes JSONArray with output from php getImage file
                    jsonArray = new JSONArray(output);
                    if(jsonArray != null){
                        int len = jsonArray.length();
                        for(int i=0; i<len; i++){
                            stringList.add(jsonArray.get(i).toString());
                        }
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
                Toast.makeText(MainActivity.this, String.valueOf(stringList), Toast.LENGTH_LONG).show();
            }
        }
    }).execute(loadPic);
}

应该显示 ArrayList 内容的 Toast 只是显示为 '[]'。

【问题讨论】:

  • output 字符串的格式是什么?或者更好的是,显示output 字符串。
  • 嗨,Lym,输出看起来像这样 [{"advert_File_Path":"toothpaste.jpg"},{"advert_File_Path":"moisturizer.jpg"},{"advert_File_Path":"shampoo.jpg "},{"advert_File_Path":"hobnobs.png"},{"advert_File_Path":"shrek.jpg"}]数组
  • 试试stringList.add(jsonArray.getJSONObject(i).optString("advert_File_Path"));
  • 最后一个array&lt;!-- --&gt; 也是output 字符串的一部分吗?并且,请登录以查看您的jsonArray 的长度。
  • 我设法删除了数组,似乎是注释代码以某种方式突破了。我记录了数组的长度,但没有出现 System.out

标签: java php android arrays json


【解决方案1】:

使用stringList.add(jsonArray.getString(i));

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。提及为什么这个答案比其他答案更合适也没有什么坏处。
【解决方案2】:

试试这个:

JSONArray arr = new JSONArray(putNesessaryValueHere);
List<String> list = new ArrayList<String>();
for(int i = 0; i < arr.length(); i++){
    list.add(arr.getJSONObject(i).getString("name"));
}

【讨论】:

    【解决方案3】:
    Try this : 
    
    ArrayList<String> arrayList = new ArrayList<String>();
    JSONArray jsonArray = new JSONArray();
    for(int i = 0, count = jsonArray.length(); i< count; i++)
    {
        try {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            arrayList.add(jsonObject.toString());
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
    }
    

    【讨论】:

      【解决方案4】:

      设法自己解决了。
      就这样吧,

      第 1 步。我不得不从我的 php 文件中删除注释代码,因为它以某种方式突破,这就是 JSON 数组末尾的来源。

      第 2 步。我必须从我用于错误检查的 php 文件中删除一个额外的回显。我想我说你想要的唯一回声是 json_encode 是对的。

      第 3 步。检查 Java 中 JSONarray 的长度,它记录了 5,所以我现在知道它读取正确。

      步骤 4. 添加 Pavneet_Singh 的代码 sn-p 以将 stringList.add(jsonArray.get(i).toString()); 替换为 stringList.add(jsonArray.getJSONObject(i).optString("advert_File_Path"));

      步骤 5. 使用此代码将 stringList 从 ArrayList 转换为 String 数组 stringArray = new String[stringList.size()]; stringArray = stringList.toArray(stringArray);

      快乐的时光!我花了太长时间试图弄清楚这一点,哈哈,前两个步骤非常愚蠢,但有时生活中最明显的事情是最难找到的。希望这也可以帮助其他人!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-20
        • 2015-04-05
        • 2011-11-22
        相关资源
        最近更新 更多