2016-08-22 2 views
0

Я когда-либо искал эту проблему на других сообщениях, но я не могу разрешить ее с ними.

Формат JSON ответ:

{ 
    "products":[ 
     { 
     "name":"Top fluide doubl\u00e9", 
     "description":"DESCRIPTION ........" 
     }, 
     { 
     "name":"Sweat avec fentes lat\u00e9rales", 
     "description":"DESCRIPTION ........" 
     }, 
     { 
     "name":"Robe \u00e9paules d\u00e9nud\u00e9es", 
     "description":"DESCRIPTION ........" 
     }, 
     { 
     "name":"Blouson bomber \u00e0 zip imprim\u00e9", 
     "description":"DESCRIPTION ........" 
     } 
    ], 
    "success":4 
} 

API для модернизации 2

@GET("products") 
    Call<List<ProductTest>> getProductList(); 

@GET("products/{product}") 
Call<ProductTest> getProduct(@Path("product") int product); 

@GET("success") 
Call<SuccessTest> getSuccessNb(); 

Класс JAVA продукта

public class ProductTest { 
    String name; 
    String description; 

    public String getName() { 
     return name; 
    } 

    public String getDescription() { 
     return description; 
    } 
} 

Ретрофит 2 строитель

Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl("http://10.0.2.2:80/App/PHP_script/reading_all_products.php/") 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
CatalogAPI service = retrofit.create(CatalogAPI.class); 

служба, которая работает, чтобы получить успех ответ JSON

service.getSuccessNb().enqueue(new Callback<SuccessTest>() { 
      @Override 
      public void onResponse(Call<SuccessTest> call, Response<SuccessTest> response) { 
       if(response.isSuccessful()) 
       { 
        Log.i("retrofit : ", "" + response.body().getSuccess()); 
       } 
       else 
       { 
        Log.i("retrofit : ", "NULL BODY -> " + response.errorBody()); 
       } 
      } 

      @Override 
      public void onFailure(Call<SuccessTest> call, Throwable t) { 
       Log.i("retrofit : ", "onFailure -> " + t.getLocalizedMessage()); 

      } 
     }); 

службы, которая не работает, чтобы получить список продуктов или один продукт в списке

service.getProductList().enqueue(new Callback<List<ProductTest>>() { 
      @Override 
      public void onResponse(Call<List<ProductTest>> call, Response<List<ProductTest>> response) { 
       Log.i("retrofit : ", "pre-ok"); 

       if(response.isSuccessful()) 
       { 
        Log.i("retrofit : ", "ok"); 
       } 
       else 
       { 
        Log.i("retrofit : ", "NULL BODY -> " + response.errorBody()); 
       } 
      } 

      @Override 
      public void onFailure(Call<List<ProductTest>> call, Throwable t) { 
       Log.i("retrofit : ", "onFailure -> " + t.getLocalizedMessage()); 
      } 
     }); 

     service.getProduct(2).enqueue(new Callback<ProductTest>() { 
      @Override 
      public void onResponse(Call<ProductTest> call, Response<ProductTest> response) { 
       if(response.isSuccessful()) 
       { 
        Log.i("retrofit : ", "" + response.message()); 
        Log.i("retrofit : ", response.body().getName() + " => " + response.body().getDescription()); 
       } 
       else 
       { 
        Log.i("retrofit : ", "NULL BODY -> " + response.errorBody()); 
       } 
      } 

      @Override 
      public void onFailure(Call<ProductTest> call, Throwable t) { 
       Log.i("retrofit : ", "onFailure -> " + t.getLocalizedMessage()); 
      } 
     }); 

ошибка для этих двух последних случаев:

Ожидаемое BEGIN_ARRAY но BEGIN_OBJECT в строке 1 столбец 2 путь $ ,

Я использовал класс-обертку, который работает отлично, но я хочу некоторые объяснения этих случаях для того, чтобы полностью понять связь между Модернизированный 2 и JSON

ответ

0

Поступающий JSON

{ <- indicates its a object 
    "products":[ <- this object has a field called products and its value is array 

указывая на объект с одним из полей как продуктов, и это поле является списком.

class ProductsResponse { 
List<Products> products; 
+0

То, что я сделал, но я не понимаю, почему это работает ... –

+0

проверка обновлений .. надеюсь, что это поможет вам понять формат JSON – UDI

+0

Большое спасибо, но как я могу получить только один объект массив «продуктов» с модификацией? –

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