2017-03-21 112 views
0

我有一个php文件,它从特定列中提取所有行。然后将结果放入数组中,然后进行json_encoded。当我为PHP文件输出时,它会显示一个正确值的JSON字符串。我需要将它转换为一个Java String数组,以便我可以通过单击一个按钮来逐个遍历它。
我已经在这里尝试过多种解决方案,但无济于事,所以任何帮助将不胜感激!
如何将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 { 
        //initializws 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内容的吐司只是显示为 '[]' 。

+0

'output'字符串的格式是什么?或者更好的是,显示'output'字符串。 –

+0

嗨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”}] array Gus

+0

尝试'stringList.add(jsonArray.getJSONObject(i).optString(“advert_File_Path”));' –

回答

0

设法解决它自己。
所以在这里,第1步。我不得不删除从我的PHP文件注释的代码,因为它以某种方式突破,那是从JSON数组的末尾。

第2步。我不得不从PHP文件中删除额外的回声,我正在用它进行错误检查。我想我说得对,你想要的唯一回声是json_encode。

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

第4步:添加Pavneet_Singh的代码片段使用此代码stringArray = new String[stringList.size()]; stringArray = stringList.toArray(stringArray);

快乐的日子,从一个ArrayList代替stringList.add(jsonArray.get(i).toString()); stringList.add(jsonArray.getJSONObject(i).optString("advert_File_Path"));

第5步转换的StringList到字符串数组中!我花了很长时间试图弄清楚哈哈前两个步骤是非常不利的,但有时候这是人生中最难以发现的最明显的事情。希望这可以帮助别人!

0

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

+0

不起作用,完全一样:/ – Gus

+0

虽然此代码可能会回答问题,但提供了其他[上下文](https://meta.stackexchange。com/q/114762)关于_how_和/或_why_它解决了这个问题会提高答案的长期价值。它也不会提到为什么这个答案比其他答案更合适。 –

0

试试这个:

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")); 
} 
0
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(); 
    } 
} 
相关问题