Чтение JSON - Модернизация - Студия Android - PullRequest
0 голосов
/ 21 декабря 2018

Мне действительно нужна помощь с этим.Я не могу прочитать JSON, и я не знаю, что я делаю неправильно.

Я оставлю здесь свой код.

У меня есть этот Json

 {
    "id": "288",
    "name": "Tarjeta Shopping",
    "secure_thumbnail": "https://www.mercadopago.com/org-img/MP3/API/logos/288.gif",
    "thumbnail": "http://img.mlstatic.com/org-img/MP3/API/logos/288.gif",
    "processing_mode": "aggregator",
    "merchant_account_id": null
  }

Этомой класс, который должен представлять, что JSON

public class Tarjeta {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("secure_thumbnail")
@Expose
private String secureThumbnail;
@SerializedName("thumbnail")
@Expose
private String thumbnail;
@SerializedName("processing_mode")
@Expose
private String processingMode;
@SerializedName("merchant_account_id")
@Expose
private Object merchantAccountId;

public Tarjeta() {
}

public String getId() {
    return id;
}

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

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSecureThumbnail() {
    return secureThumbnail;
}

public void setSecureThumbnail(String secureThumbnail) {
    this.secureThumbnail = secureThumbnail;
}

public String getThumbnail() {
    return thumbnail;
}

public void setThumbnail(String thumbnail) {
    this.thumbnail = thumbnail;
}

public String getProcessingMode() {
    return processingMode;
}

public void setProcessingMode(String processingMode) {
    this.processingMode = processingMode;
}

public Object getMerchantAccountId() {
    return merchantAccountId;
}

public void setMerchantAccountId(Object merchantAccountId) {
    this.merchantAccountId = merchantAccountId;
}

@Override
public String toString() {
    return "Tarjeta{" +
            "id='" + id + '\'' +
            ", name='" + name + '\'' +
            ", secureThumbnail='" + secureThumbnail + '\'' +
            ", thumbnail='" + thumbnail + '\'' +
            ", processingMode='" + processingMode + '\'' +
            ", merchantAccountId=" + merchantAccountId +
            '}';
}

}

Это мой метод GET

@GET("payment_methods/card_issuers")
Call<Tarjeta> getTarjetas2(@Query("public_key") String apiKey,
                           @Query("payment_method_id") String payment_method_id);

И именно здесь я пытаюсь его прочитать.

botonTest2.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
      System.out.println("Test boton 2 clickeado");
      Retrofit retrofit = new Retrofit.Builder()
              .baseUrl(BASE_URL)
              .addConverterFactory(GsonConverterFactory.create())
              .build();

      ServicePago servicePago = retrofit.create(ServicePago.class);
      Call<Tarjeta> contenedorTarjetaCall = servicePago.getTarjetas2(apiKey,"visa");

      contenedorTarjetaCall.enqueue(new Callback<Tarjeta>() {
          @Override
          public void onResponse(Call<Tarjeta> call, Response<Tarjeta> response) {
              Toast.makeText(MainActivity.this, "BIEN", Toast.LENGTH_SHORT).show();

          }

          @Override
          public void onFailure(Call<Tarjeta> call, Throwable t) {
              Toast.makeText(MainActivity.this, "ALGO SALIO MAL", Toast.LENGTH_SHORT).show();
          }
      });
  }

});

Я слышу эту ошибку: java.lang.IllegalStateException: ожидаемый BEGIN_OBJECT, но был BEGIN_ARRAY в строке 1, путь 2 столбца $

Я думаю, что мой классправильно смоделирован, я полностью потерян.

1 Ответ

0 голосов
/ 21 декабря 2018

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

ошибка говорит о том, что полученный JSON не является Tarjeta, а массивом Tarjeta.поэтому, чтобы исправить это, я думаю, вам просто нужно обернуть ваш ответ в виде списка.так получается примерно так:

@GET("payment_methods/card_issuers")
Call<List<Tarjeta>> getTarjetas2(@Query("public_key") String apiKey,
                           @Query("payment_method_id") String payment_method_id);
...