正在学习如何在我的Android应用程序中使用改型,出现以下错误:如果可以,请提供帮助。非常感谢。
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
以下是我的代码:如果您也有能力,请帮助:
public void clickButton(View view){
button = (Button) findViewById(R.id.button);
drawDate = (TextView)findViewById(R.id.drawDate);
LotteryAPI.Factory.getIstance().getLottery().enqueue(new Callback<Lottery>() {
@Override
public void onResponse(Call<Lottery> call, Response<Lottery> response) {
Log.d(TAG, "getting Draw Date");
Log.d(TAG, "Draw Date is: " + response.body().getDrawDate());
String DRAW_DATE = response.body().getDrawDate();
drawDate.setText("DRAW_DATE");
Log.d(TAG, "done setting Draw Date");
}
@Override
public void onFailure(Call<Lottery> call, Throwable t) {
Log.e("Failed", t.getMessage());
Log.d(TAG, "At onFailure - Something Failed!!");
Log.d(TAG, "error is: " + t.getCause());
}
});
}
这是我的界面:
String BASE_URL = "https://data.ny.gov/resource/h6w8-42p9.json/";
@GET("?$$app_token=xxxxxxGtxKw3s6gurSxxxxxx")
Call<Lottery> getLottery();
class Factory {
public static LotteryAPI service;
public static LotteryAPI getIstance() {
if (service == null) {
Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl(BASE_URL).build();
service = retrofit.create(LotteryAPI.class);
return service;
} else {
return service;
}
}
}
以下是我的建议:
@Generated("org.jsonschema2pojo")
public class Lottery {
@SerializedName("draw_date")
@Expose
private String drawDate;
@SerializedName("mega_ball")
@Expose
private String megaBall;
@SerializedName("multiplier")
@Expose
private String multiplier;
@SerializedName("winning_numbers")
@Expose
private String winningNumbers;
/**
*
* @return
* The drawDate
*/
public String getDrawDate() {
return drawDate;
}
/**
*
* @param drawDate
* The draw_date
*/
public void setDrawDate(String drawDate) {
this.drawDate = drawDate;
}
/**
*
* @return
* The megaBall
*/
public String getMegaBall() {
return megaBall;
}
/**
*
* @param megaBall
* The mega_ball
*/
public void setMegaBall(String megaBall) {
this.megaBall = megaBall;
}
/**
*
* @return
* The multiplier
*/
public String getMultiplier() {
return multiplier;
}
/**
*
* @param multiplier
* The multiplier
*/
public void setMultiplier(String multiplier) {
this.multiplier = multiplier;
}
/**
*
* @return
* The winningNumbers
*/
public String getWinningNumbers() {
return winningNumbers;
}
/**
*
* @param winningNumbers
* The winning_numbers
*/
public void setWinningNumbers(String winningNumbers) {
this.winningNumbers = winningNumbers;
}
}
您应该更改POJO类结构的结构,因为正如我所看到的,您的json字符串是一个包含对象的数组。你必须适应POJO课程:
class Lottery {
private String draw_date, mega_ball, multiplier, winning_numbers;
public Lottery() {}
public String getDraw_date() {
return draw_date;
}
public void setDraw_date(String draw_date) {
this.draw_date = draw_date;
}
public String getWinning_numbers() {
return winning_numbers;
}
public void setWinning_numbers(String winning_numbers) {
this.winning_numbers = winning_numbers;
}
public String getMega_ball() {
return mega_ball;
}
public void setMega_ball(String mega_ball) {
this.mega_ball = mega_ball;
}
public String getMultiplier() {
return multiplier;
}
public void setMultiplier(String multiplier) {
this.multiplier = multiplier;
}
}
您还必须将以下行从更改为LotteryAPI接口
Call<Lottery> getLottery();
到
Call<List<Lottery>> getLottery();
然后在onSolutions()回调中,您应该遍历LotteryObj列表
public void clickButton(View view){
button = (Button) findViewById(R.id.button);
drawDate = (TextView)findViewById(R.id.drawDate);
LotteryAPI.Factory.getIstance().getLottery().enqueue(new Callback<List<Lottery>>() {
@Override
public void onResponse(Response<List<Lottery>> response, Retrofit retrofit) {
Log.e(TAG, response.body()+"");
for (Lottery lt : response.body()) {
Log.e(TAG, lt.getDraw_date());
Log.e(TAG, lt.getMega_ball());
if (lt.getMultiplier() != null) Log.e(TAG, lt.getMultiplier());
Log.e(TAG, lt.getWinning_numbers());
}
Log.d(TAG, "getting Draw Date");
//日志。d(标签,“绘制日期为:”response.body()。getDrawDate());//字符串DRAW_DATE=响应。body()。getDrawDate();提款日期。setText(“提款日期”);日志d(标记“完成绘制日期设置”);}
@Override
public void onFailure(Throwable t) {
Log.e("Failed", t.getMessage());
Log.d(TAG, "At onFailure - Something Failed!!");
Log.d(TAG, "error is: " + t.getCause());
}
});
}
问题是,endpoint正在返回彩票类项目的列表,而您正在请求改装以将响应映射到单个彩票项目。
尝试更改呼叫
我正在努力学习改型,尽管从数据库中检索文本相当容易。我在向数据库提交数据时有点麻烦。 我提交的数据会进入数据库,但每次提交数据时都会显示此错误。toast表示-应为BEGIN_对象,但在第1行第2列路径处为字符串$ 这是我的注册API活动: 公共接口注册器API{ 这是我的个人课: 这是我的插入活动: 检索文本 以下问题的答案 我想回答我自己的问题,但我无法回答下面的问题,因为我被标记为重复。不管
我试图检索数据并在回收器视图中显示它们。我正在进行改装,提出获取请求...一切都很好,除了:它不会在回收器中显示数据,因为它说:“预期BEGIN_ARRAY但在第1行第2列BEGIN_OBJECT”。我还使用了JSON插件中的kotlin数据类文件,从响应中生成数据类。我不知道该怎么办,我被卡住了。. 以下是我的课程: ApiClient。kt ApiService.kt UserReposito
我使用Laravel构建了一个简单的API,它运行良好。我的Android应用程序应该使用这个API中的数据,但对于一些JSON响应,我得到了一个错误 应为BEGIN_对象,但在第1行第1列路径处为字符串 在得到这个错误之前,错误如下: 使用JsonReader。setLenient(true)在第1行第1列路径接受格式错误的JSON 然后我来解决它。 我在许多其他帖子中看到,这个问题是一个畸形的
这将创建异常 非常感谢你的帮助。
我试图用MovieGlu API返回数据,但当我运行应用程序时,我得到以下错误: 改装2:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$ 我希望能够在文本视图中一个接一个地显示单个对象的结果,例如:“film_name”:“赌场”,而不是一次显示所有对象。
我试图在android上使用谷歌的Gson和Kotlin解析以下json 我使用的模型和代码如下所示: 我希望它能正常工作,但每次反序列化时都会引发异常: Gson:java。lang.IllegalStateException:应为BEGIN_对象,但在第1行第184列路径$处为字符串。数据 我做错了什么?Gson不支持列表反序列化?