2015-02-25 2 views
1

Я тяну свои волосы от этого. Я все еще не совсем понимаю, как работает JSON. Я пытаюсь вернуть число (отформатированное как строка) из скрипта PHP в java. Я получаю следующее сообщение об ошибке:Как разобрать этот PHP на Java с помощью JSON?

Error parsing data org.json.JSONException: Value http of type java.lang.String cannot be converted to JSONArray 

Это фрагмент из кода PHP:

class result 
{ 
    public $value = ""; 
} 

$result = new result(); 
$result->value = "1"; 

print(json_encode($result)); 

Это возвращает: { "значение": "1"}

Я пытаюсь для хранения «1» в строке для проверки ошибок на стороне Android.

Сначала он вставляется в базу данных MySQL, и это работает, но оно не вернет значение правильно.

Вот кода Java, которые я пытался использовать:

try 
{ 
    CustomHttpClient.executeHttpPost(response="http://test.com/test.php",postParameters); 

    String result = response.toString(); 

    try 
    { 
      returnString = ""; 

      JSONArray jArray = new JSONArray(result); 

      for(int i=0;i<jArray.length();i++) 
      { 
       JSONObject json_data = jArray.getJSONObject(i); 
       Log.i("log_tag","value:"+json_data.getString("value")); 

       returnString = json_data.getString("value"); 

      } 

    } 

    catch(JSONException e) 
    { 
     Log.e("log_tag", "Error parsing data "+e.toString()); 
     Toast.makeText(getApplicationContext(), "Error Parsing", Toast.LENGTH_LONG).show();            
    } 
} 
+1

хорошо вы имеете в виду вы хотите передать JSON с помощью PHP для Java? –

+1

Вы пытаетесь прочитать массив, но это единственный объект. – eduyayo

ответ

2

Ваш PHP-код возвращает объект JSON (заключенный в {}), а не массив (заключенный в []). Таким образом, вы должны изменить свой JSON код разбора, как

returnString = ""; 

JSONObject json_data = new JSONObject(result); 
Log.i("log_tag","value:"+json_data.getString("value")); 

returnString = json_data.getString("value"); 

Так, есть только один объект JSON возвращается, нет необходимости в цикле тоже.

0

Прежде всего, я рекомендую использовать Gson API, который является удивительным API для обработки объектов JSON. Я настоятельно рекомендую вам прочитать руководства на своем веб-сайте.

Проблема заключается в том, что вы пытаетесь преобразовать объект в массив, и именно поэтому вы получаете исключение. Правильный способ преобразовать значение, указанное выше, является:

JsonObject jObject = (JsonObject) new JsonParser().parse(value); 

В приведенном выше примере используется Gson API, но то же самое относится и к вашему API.

0

Вы можете попробовать в этом примере, это работа для меня:

public String listOfUser() { 
     //User users = new User(); 

     String URI = "http://localhost/Perumahan/index.php/User_c"; 
     RestTemplate restTemplate = new RestTemplate(); 
     HttpHeaders headers = new HttpHeaders(); 
     headers.setContentType(MediaType.APPLICATION_JSON); 
     List<LinkedHashMap> users = restTemplate.getForObject(URI, List.class); 
     //userService.addUser(users); 
     return gson.toJson(users); 

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