2016-08-22 1 views
0

다른 게시물에 대해이 문제를 찾고 있지만 문제를 해결할 수 없습니다.개장 2 "예상 BEGIN_ARRAY했지만 1 열 2 열 경로에서 BEGIN_OBJECT했습니다"

형식 JSON 응답 : 개조 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); 
에 대한

{ 
    "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 목록에있는 제품의 목록 또는 하나 개의 제품을 얻을 작동하지 않는 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()); 

      } 
     }); 

서비스의 성공을 얻기 위해 노력하고 있습니다 691,363,210

서비스

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은 (는) 1 행 2 열의 경로 $에서 BEGIN_OBJECT였습니다. .

나는 완벽하게 작동하는 래퍼 클래스를 사용했다하지만 난 완벽하게 개조 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

많은 감사를 이해하는 데 도움이,하지만 난 단 하나 개의 객체를 얻을 수있는 방법 희망 개선 된 배열 "제품"? –