2017-03-21 164 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(); 
    } 
} 
相關問題