Хорошо, я прочитал еще пару вопросов с этой же ошибкой, но ни на один из них не было получено ответа, и я не могу заставить его работать.Я подключаюсь к Google In-App Billing и у меня все настроено, но, когда я пытаюсь вытащить свои skudetails (у меня там сейчас 2 SKU), я получаю сообщение об ошибке - Ожидается BEGIN_OBJECT, но в столбце строки 1 была BEGIN_ARRAY2 path $
У меня есть класс модели SubscriptionActivity, Result (сериализуемый) и Details (сериализуемый).Ниже приведен код, любая помощь будет отличной, спасибо -
Из подписки активность:
Gson gson = new Gson();
try {
Result result = gson.fromJson(skuDetailsList.toString(), Result.class);
if (result != null) {
for (Details d : result.getDetails()) {
System.out.println(d.getProductId()
+ " \n " + d.getTitle() + " \n " + d.getDescription() + " \n "
+ d.getPrice());
}
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Из деталей модели:
public class Details implements Serializable{
@SerializedName("productId")
@Expose
private String productId;
@SerializedName("type")
@Expose
private String type;
@SerializedName("price")
@Expose
private String price;
@SerializedName("price_amount_micros")
@Expose
private Integer priceAmountMicros;
@SerializedName("price_currency_code")
@Expose
private String priceCurrencyCode;
@SerializedName("subscriptionPeriod")
@Expose
private String subscriptionPeriod;
@SerializedName("freeTrialPeriod")
@Expose
private String freeTrialPeriod;
@SerializedName("title")
@Expose
private String title;
@SerializedName("description")
@Expose
private String description;
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public Integer getPriceAmountMicros() {
return priceAmountMicros;
}
public void setPriceAmountMicros(Integer priceAmountMicros) {
this.priceAmountMicros = priceAmountMicros;
}
public String getPriceCurrencyCode() {
return priceCurrencyCode;
}
public void setPriceCurrencyCode(String priceCurrencyCode) {
this.priceCurrencyCode = priceCurrencyCode;
}
public String getSubscriptionPeriod() {
return subscriptionPeriod;
}
public void setSubscriptionPeriod(String subscriptionPeriod) {
this.subscriptionPeriod = subscriptionPeriod;
}
public String getFreeTrialPeriod() {
return freeTrialPeriod;
}
public void setFreeTrialPeriod(String freeTrialPeriod) {
this.freeTrialPeriod = freeTrialPeriod;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
Из результата деятельности:
public class Result implements Serializable{
@SerializedName("SkuDetails")
@Expose
private ArrayList<Details> details = new ArrayList<Details>();
/**
*
* @return The SkuDetails
*/
public ArrayList<Details> getDetails() {
return details;
}
/**
*
* @param details
* The details
*/
public void setDetails(ArrayList<Details> details) {
this.details = details;
}
}*
Оу ... и ответ, который я пытался проанализировать (skuDetailsList.toString ()):
[
SkuDetails: {
"productId": "basic_sub",
"type": "subs",
"price": "$0.99",
"price_amount_micros": 990000,
"price_currency_code": "USD",
"subscriptionPeriod": "P1M",
"freeTrialPeriod": "P4W2D",
"title": "Basic Subscription Service (DadBod Recipes)",
"description": "Basic Subscription Service for DadBodRecipes"
},
SkuDetails: {
"productId": "enterprise_sub",
"type": "subs",
"price": "$2.99",
"price_amount_micros": 2990000,
"price_currency_code": "USD",
"subscriptionPeriod": "P1M",
"freeTrialPeriod": "P4W2D",
"title": "Enterprise Subscription Service (DadBod Recipes)",
"description": "Enterprise Subscription Service for DadBodRecipes"
}
]