2016-01-28 4 views
0

Я создаю приложение для Android и пытаюсь прочитать данные json, возвращенные с PHP (Laravel).Невозможно прочитать объект JSON в Android

Вот PHP код:

$id = $request->input('id'); 

    $customer = Customer::find(array('id' => $id)); 

    if(!isset($customer)) 
     return json_encode(array('message'=>'empty')); 
    else 
     return json_encode(array('message'=>'found', 'customer' => $customer)); 

Вот ответ JSON я получаю:

{"message":"found","customer":[{"id":1,"phone":"1234567890","name":"abc","photo":"","status":"active","created_at":"2016-01-18 09:23:10","updated_at":"-0001-11-30 00:00:00"}]} 

Вот Android код:

client.get(Utility.server + "/get-customer-info", params, new AsyncHttpResponseHandler() { 
     // When the response returned by REST has Http response code '200' 
     @Override 
     public void onSuccess(String response) { 
      try { 
       JSONObject obj = new JSONObject(response); 

       if (obj.getString("message").equals("found")) { 

        JSONObject customer = obj.getJSONObject("customer"); 

        String id = customer.getString("id"); 
        String name = customer.getString("name"); 
        String phone = customer.getString("photo"); 
        String photo = customer.getString("photo"); 
        String status = customer.getString("status"); 
        String createdAt = customer.getString("created_at"); 

        Utility.customer = new Customer(id, name, phone, photo, status, createdAt); 

        Intent i = new Intent(SplashActivity.this, MainActivity.class); 
        startActivity(i); 
       } 
       else if (obj.getString("message").equals("empty")) { 
        Intent i = new Intent(SplashActivity.this, WelcomeActivity.class); 
        startActivity(i); 
       } 
       else { 
        Toast.makeText(getApplicationContext(), "Invalid data", Toast.LENGTH_LONG).show(); 
       } 
      } catch (JSONException e) { 
       Toast.makeText(getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } 
     } 

Внутренний объект клиента как массив, и я не могу прочитать его с помощью JSONObject или JSONArray. Я получаю ошибку несоответствия типов для заявления:

JSONObject customer = obj.getJSONObject("customer"); 
+0

«клиент» - это массив? – Brendon

ответ

1

из вашего ответа JSON это ясно видно, что это не JsonArrayJsonObject. Получите ваш 1-ый объект клиента, как это:

JSONArray customerArr = obj.getJSONArray("customer"); 
JsonObject customer=customerArr.getJSONObject(0); 

Если вы имеете более одного данных в массиве клиента, принять использование для цикла

for(int i=0;i<customerArr.length;i++) 
{ 
    JsonObject customer=customerArr.getJSONObject(i); 

} 
1

изменить код ниже способом

JSONObject obj = new JSONObject(response); 
    if (obj.getString("message").equals("found")) { 
    JSONArray customer = obj.getJSONArray("customer"); 
    if (customer != null && customer.length() > 0) { 
    for (int kk = 0; kk <customer.length(); kk++) { 
      JSONObject json1 = customer.optJSONObject(kk); 
      String id = json1.getString("id"); 
      String name = json1.getString("name"); 
      String phone = json1.getString("photo"); 
      String photo = json1.getString("photo"); 
      String status = json1.getString("status"); 
      String createdAt = json1.getString("created_at"); 
      Utility.customer = new Customer(id, name, phone, photo, status, createdAt); 
     } 
     // your other code 
    } 
}