2017-06-22 37 views
0

我有,我用它來獲得從BBDD一些信息以.php腳本:無法從JSON收到的數據 - 的phpMyAdmin

<?php 
//Creating a connection 
$con = mysqli_connect("localhost:3306","root","","database"); 

if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$sql= "SELECT * FROM tQuestions"; 

$result = mysqli_query($con ,$sql); 

while ($row = mysqli_fetch_assoc($result)) 
{  
    $array[] = $row; 
    (ONLY USED ON SECOND TRY) echo $row; 
} 
header('Content-Type:Application/json'); 

echo json_encode($array); 

mysqli_free_result($result); 

mysqli_close($con); 
?> 

當我使用它在我的Android應用程序,我收到一個空值。另外,當我去正確的鏈接,我收到一個沒有信息和無效的JSON文件的頁面。

然後,我把一個「echo $行」來看看我收到了什麼,並且我有一個這樣的字符串:「ArrayArrayArrayArray」...並且它有50個「數組」字樣,它們與我在數據庫中擁有的行。

我在做什麼錯?我也把Android代碼:

private void getQuestionsFromDB() { 

    AsyncTask<Void, Void, JSONArray> asyncTask = new AsyncTask<Void, Void, JSONArray>() { 
     @Override 
     protected JSONArray doInBackground(Void... params) { 

      JSONArray array = null; 
      OkHttpClient client = new OkHttpClient(); 
      Request request = new Request.Builder() 
        .url("http://www.am-motion.eu/scriptsapp/preguntas.php") 
        .build(); 
      try { 
       Response response = client.newCall(request).execute(); 

       array = new JSONArray(response.body().string()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return array; 
     } 

     @Override 
     protected void onPostExecute(JSONArray array) { 
      try { 
       for (int i = 0; i < array.length(); i++) { 
        JSONObject object = null; 
        object = array.getJSONObject(i); 

        listQuestions.add(object.getString("Question")); 

        listAnswers.add(object.getString("Answer1")); 
        listAnswers.add(object.getString("Answer2")); 
        listAnswers.add(object.getString("Answer3")); 
        listAnswers.add(object.getString("Answer4")); 

        listCorrectAnswer.add(object.getString("Answer")); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 

    asyncTask.execute(); 
} 

謝謝!

+0

如果從瀏覽器訪問URL,什麼是輸出?是否顯示'json'數據? –

+0

沒有輸出。我看到一個白皮書tiwhout信息。但是,如果我使用「echo $ row」的輸出是「ArrayArrayArray ...」 – Imrik

+0

請檢查您的apache錯誤日誌,我只是好奇'json'模塊未在您的php中激活 –

回答

0

你的問題是你將所有的數組傳遞給'json_encode'函數。你必須使用一個支持或的foreach循環來解析值:

for ($i = 0; $i < sizeof($array); $i++) { 
    echo json_encode($array[$i]); 
} 

如果你想有一個JSONArray你可以使用:

for ($i = 0; $i < sizeof($array); $i++) { 
    if($i==0){ 
     echo '['; 
     echo json_encode($array[$i]); 
    } else if ($i == sizeof($array) -1) { 
     echo json_encode($array[$i]); 
     echo "]"; 
    } else { 
     echo json_encode($array[$i]); 
     echo ","; 
    } 
} 
+0

我現在會嘗試 – Imrik

+0

第一次工作正常,但第二個給我一個沒有數據的頁面,都是白衣。你知道爲什麼嗎?我對第二種選擇很感興趣。 – Imrik

+0

我在最後加上「}」。但我認爲格式根本不正確。它在最後的「]」之前給了我兩個額外的「,」。 – Imrik