2017-06-22 1 views
0

J'ai un script .php que j'utiliser pour obtenir des informations à partir d'un BBDD:Ne peut pas recevoir des données de 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); 
?> 

Quand je l'utilise sur mon Android App, je reçois une valeur nulle . Aussi quand je vais le lien correct, je reçois une page sans information et un fichier json vide.

Ensuite, je mets un "echo $ row" pour voir ce que je reçois, et j'ai une chaîne comme ceci: "ArrayArrayArrayArray" ... Et il a 50 mots "Array", qui sont les mêmes que les lignes que j'ai sur la base de données.

Qu'est-ce que je fais mal? Je mets aussi le code 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(); 
} 

Merci!

+0

Si vous accédez à l'URL du navigateur, ce qui est la sortie? Les données 'json' sont-elles affichées? –

+0

il n'y a pas de sortie. Je vois une page blanche avec des informations. Mais, si j'utilise "echo $ row" la sortie était "ArrayArrayArray ..." – Imrik

+0

s'il vous plaît vérifier votre journal des erreurs apache, je viens de curieux module 'json' pas activer dans votre php –

Répondre

0

Votre problème est que vous passez tout le tableau à la fonction 'json_encode'. Vous devez utiliser un pour ou cycle de foreach pour analyser les valeurs:

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

Et si vous voulez un JSONArray vous pouvez utiliser:

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

Je vais essayer dès maintenant – Imrik

+0

la première fonctionne très bien , mais la seconde me donne une page sans données, c'est tout blanc. Est-ce que tu sais pourquoi? Je suis intéressant sur la deuxième option. – Imrik

+0

Je l'ai fait avec un "}" à la fin. Mais le format n'est pas correct du tout, je pense. Cela me donne deux extra "," à la fin, avant le "]". – Imrik