2015-06-07 4 views
0

Я пытаюсь получить информацию из базы данных MySql через Volley в JSONArray. PHP скрипт для извлечения строк из таблицы выглядит следующим образом:JSONException Index вне диапазона [0..1)

<?php 
ob_start(); 
header('Content-Type: application/json'); 
$con=mysqli_connect("localhost","root","","planet_db"); 
if (mysqli_connect_errno($con)) 
{ 
    //echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$search = $_POST['search']; 
//sql query 
$query = "SELECT FirstName, LastName, Username FROM users WHERE Username='$search' OR FirstName='$search'"; 
$result = mysqli_query($con,$query); 
$jsonArr = array(array("FirstName"=>"Einie", "LastName"=>" Mini")); 
while($row = mysqli_fetch_assoc($result)) 
{ 
    array_push($jsonArr,$row); 
} 
ob_end_clean(); 
echo json_encode($jsonArr); 
mysqli_close($con);?> 

Результат на выполнение запроса к базе данных на локальном хосте с помощью HTML страницы выглядит следующим образом: user query query result

В sencond элемент (индекс 1) JSONArray присутствует, как показано выше, но когда я пытаюсь получить элемент в индексе 1 в JSONArray, полученном клиентом приложения Android, он выдает исключение JSONException: index из bound [0..1). И аналогичным образом, когда я редактирую следующую строку в своем PHP-скрипте: $jsonArr = array(array("FirstName"=>"Einie", "LastName"=>" Mini")); - $jsonArr=array(); и попытаюсь получить элемент в JSONArray с индексом 0, я получаю исключение JSON: index out of bound [0..0). В заключение я не могу получить какой-либо элемент в JSONArray добавлен через код:

while($row = mysqli_fetch_assoc($result)) 
{ 
    array_push($jsonArr,$row); 
} 

в моем андроид приложение, вместо этого он бросает JSONException: индекс из границы, но я успешно получить правильный массив JSON во время работы его на локальном хосте. Это код моего Android приложения в:

private void performSearch() 
{ 
    final String url = "http://192.168.42.16/planet/searchPeople.php"; 
    JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, url, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) 
       { 
        //searchResults.setAdapter(new ResultListAdapter(response, Contents.this)); 
        try { 
         Toast.makeText(Contents.this, response.getJSONObject(1).getString("FirstName") + " " 
           + response.getJSONObject(1).getString("LastName"), Toast.LENGTH_LONG).show(); 
        } catch (JSONException e) 
        { 
         e.printStackTrace(); 
         Toast.makeText(Contents.this, 
          "Error: " + e.getMessage(), 
          Toast.LENGTH_LONG).show(); 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(Contents.this, error.toString(),Toast.LENGTH_LONG).show(); 
       } 
      }) 
    { 
     @Override 
     protected Map<String, String> getParams() 
     { 
      Map<String, String> map = new HashMap<String, String>(); 
      map.put("search", query); 
      return map; 
     } 
    }; 
    MySingleton.getInstance(Contents.this).addToRq(request); // adding request to Volley Request Queue 
} 

Как я мог избавиться от такого рода индекса Out Of связанного JSONException? Любая помощь могла бы быть полезна!

+0

Вы получаете ответ JSONArray в методе onResponse() ??? – Pankaj

+0

Да, я и я пробовал каждую комбинацию, пожалуйста, предложите выход из этого. –

ответ

0

1) Ваш URL-адрес - это локальный URL-адрес, который может быть или не быть доступен с вашего телефона в соответствии с вашими сетевыми настройками. Убедитесь, что вы можете получить доступ к этому URL-адресу с вашего телефона.

2) Сначала попробуйте просто распечатать весь response в вашем методе onResponse, чтобы узнать, получаете ли вы желаемый JSON или нет.

+0

Это текст тоста, который отображается: [{"LastName": "Mini", "FirstName": "Einie"}] .., что означает, что мое устройство обращается к хосту, но где-то остается второй элемент в массиве JSON, а мой (192.168.42.16) отображается на нужные устройства. –

0

1) Прежде всего, вы убедились, что ваши 192.168.42.16 видны другим устройствам в сети? Убедитесь, что вы попытаетесь просмотреть его на своем телефоне.

2) Если это удастся, попробуйте использовать Logcat, чтобы распечатать вывод того, что у вас есть. [0..1) означает, что в ответе есть один объект, поэтому просто попробуйте выполнить его запись как Log.d ('JSONTAG', response.toString());

+0

D/JSONTAG: [{«LastName»: «Mini», «FirstName» ":" Einie "}] .. это мой вывод logcat, что означает, что мое устройство обращается к хосту, но где-то остается второй элемент в массиве JSON, а мой (192.168.42.16) отображается на нужные устройства. –

+0

Вы регистрируете первый объект в этой строке. Попробуйте записать весь ответ? – UtsavShah

+0

Я записал весь ответ, и я получил выше выход! –

Смежные вопросы