2017-12-08 19 views
0

私はこのエラーがあります。これはオブジェクトに関するものです。BEGIN_OBJECTが必要ですが、1行目の2行目のBEGIN_ARRAYでした

これは私のポートです:

http://localhost:3000/cupones 

私はこの見ることができます:

[ 
{ 
    "id": "YLabhnB", 
    "empresa": "KFC", 
    "titulo": "Mega Online", 
    "descripcion": "9 Piezas de pollo, 1 Papa Familiar, 6 Nuggets, 1 Ensalada Familiar, 1 Gaseosa de 1.5Lts", 
    "precio": 55.9, 
    "imgUrl": "https://www.kfc.com.pe/Imagenes/800x275/BOTONERA%20MEGA%20ONLINE%202.jpg" 
}, 
{ 
    "id": "LLzwhnA", 
    "empresa": "Bembos", 
    "titulo": "Promo Clásica", 
    "descripcion": "Clásica Mediana + 1 Papa Mediana + 1 Gaseosa 500ml", 
    "precio": 13.9, 
    "imgUrl": "http://www.bembos.com.pe/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/o/k/okpromoclasica__2_.png" 
} 
] 

をそれから私はここに、その後私は私のJSONResponseを作成し、jsonschema2pojoを持つクラスを作成しました:

public class JSONResponse { 
    private Cupon[] cupon; 

    public Cupon[] getCupon() { 
     return cupon; 
    } 
} 

私はここで私のインターフェイスで何かを変えることができると思います。

私のフラグメントで最後に
public interface RequestInterface { 
    @GET("cupones") 
    Call<JSONResponse> getJSON(); 
} 

private void initViews(View rootView){ 
    recyclerView = (RecyclerView) rootView.findViewById(R.id.card_recycler_view); 
    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
    recyclerView.setLayoutManager(layoutManager); 
    recyclerView.setAdapter(new CuponAdapter(new ArrayList<Cupon>())); 
    loadJSON(); 
} 

private void loadJSON(){ 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl("http://192.168.1.42:3000/") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    RequestInterface request = retrofit.create(RequestInterface.class); 
    Call<JSONResponse> call = request.getJSON(); 
    call.enqueue(new Callback<JSONResponse>() { 
     @Override 
     public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 
      JSONResponse jsonResponse = response.body(); 
      data = new ArrayList<>(Arrays.asList(jsonResponse.getCupon())); 
      adapter = new CuponAdapter(data); 
      recyclerView.setAdapter(adapter); 
     } 

     @Override 
     public void onFailure(Call<JSONResponse> call, Throwable t) { 
      Log.d("Error", t.getMessage()); 
     } 
    }); 
} 

私はそれをどのように解決するだろうか?

答えて

1

問題

期待BEGIN_OBJECTによるが、BEGIN_ARRAYは(私たちは、そのあなたの解析JSONのエラーを知ることができ、あなたの応答のルートタグが[]ある行1列2パス

にありましたJSONArrayRetrofitにはListを使用してください。

JSONResponseList<JSONResponse>に変更する必要があります。

まず

変更

public class JSONResponse { 

    /** 
    * id : YLabhnB 
    * empresa : KFC 
    * titulo : Mega Online 
    * descripcion : 9 Piezas de pollo, 1 Papa Familiar, 6 Nuggets, 1 Ensalada Familiar, 1 Gaseosa de 1.5Lts 
    * precio : 55.9 
    * imgUrl : https://www.kfc.com.pe/Imagenes/800x275/BOTONERA%20MEGA%20ONLINE%202.jpg 
    */ 

    private String id; 
    private String empresa; 
    private String titulo; 
    private String descripcion; 
    private double precio; 
    private String imgUrl; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getEmpresa() { 
     return empresa; 
    } 

    public void setEmpresa(String empresa) { 
     this.empresa = empresa; 
    } 

    public String getTitulo() { 
     return titulo; 
    } 

    public void setTitulo(String titulo) { 
     this.titulo = titulo; 
    } 

    public String getDescripcion() { 
     return descripcion; 
    } 

    public void setDescripcion(String descripcion) { 
     this.descripcion = descripcion; 
    } 

    public double getPrecio() { 
     return precio; 
    } 

    public void setPrecio(double precio) { 
     this.precio = precio; 
    } 

    public String getImgUrl() { 
     return imgUrl; 
    } 

    public void setImgUrl(String imgUrl) { 
     this.imgUrl = imgUrl; 
    } 
} 

セカンドJSONResponseクラス

変更コールコードCall<JSONResponse> getJSON();

@GET("cupones") 
Call<List<JSONResponse>> getJSON(); 
へ3210
0

私のJsonデータは配列で始まるので、私は同じ問題に直面しました。応答データをリストに変更すると、問題が解決します。

APIインタフェース:

public interface MainDataApiInterface { 

@GET("gunzaramfuni.php") 
Call<List<MainData>> getSampleDataList(); 

}

ネットワークコール:

public class NetworkCall implements RemoteApiService { 

@Override 
public void getMainDataListFromServer(final ResponseCallBack<List<MainData>> callback) { 

    MainDataApiInterface mainDataApiInterface = MainDataApiClient.GetRetrofitMainDataClient() 
      .create(MainDataApiInterface.class); 

    Call< List<MainData> > call = mainDataApiInterface.getSampleDataList(); 

    call.enqueue(new Callback<List<MainData>>() { 
     @Override 
     public void onResponse(Call<List<MainData>> call, Response<List<MainData>> response) { 
      List<MainData> mainDataJsonResponse = response.body(); 
      callback.onSuccess(mainDataJsonResponse); 
     } 

     @Override 
     public void onFailure(Call<List<MainData>> call, Throwable t) { 
      callback.onError(t); 
     } 
    }); 
} 

}

関連する問題