改装错误:java.lang.IllegalStateException:应为BEGIN_对象,但在第1行第2列路径处为BEGIN_数组$

改装错误:java.lang.IllegalStateException:应为BEGIN_对象,但在第1行第2列路径处为BEGIN_数组$,java,android,gson,retrofit,Java,Android,Gson,Retrofit,正在学习如何在我的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.bu

正在学习如何在我的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());

        }
    });
}

您应该更改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();

问题是,端点返回彩票类项目的列表,而您要求改装以将响应映射到单个彩票项目


尝试更改
调用getlotket()
to
调用getlotket()。您还需要在改型调用定义中更改它。

不确定我做错了什么。.改型无法将传入的json映射到您的彩票类。发布json,你会得到一些帮助。这里是json数据的链接,[{“draw_date”:“2016-10-04T00:00:00.000”,“mega_ball”:“01”,“乘数”:“05”,“winning_numbers”:“1829305466”},{“draw_date”:“2016-09-30T00:00:00.000”,“mega_ball”:“09”,“乘数”:“05”,“winning_numbers”:“2130475057”{“draw_date”:“2016-09-27T00:00:00.000”,“mega_ball”:“04”,“乘数”:“04”,“获胜数字”:“1416265372”},{“抽签日期”:“2016-09-23T00:00:00.000”,“超级球”:“14”,“乘数”:“03”,“获胜数字”:“0105082562”}]这是JSON数据的一个示例,伊万,再次感谢,任何帮助都将是非常好的。现在尝试一下,蒂伊万将在doneIvan之后进行更新,你说我需要在我的调用定义中更改它是什么意思?你能告诉我需要在改型调用定义中更改什么吗,谢谢,我也在改型调用中更改了它error@Override public void onResponse(Call Call,Response Response){Log.d(TAG,“get Draw Date”);Log.d(TAG,“Draw Date”是:“+Response.body().getDrawDate());String Draw_Date=Response.body().getDrawDate();drawDate.setText(“Draw_Date”);Log.d(TAG,”已完成绘图日期的设置“;}Ivan,你能看一下吗?我把代码上传到githubTsiro,我做了修改,在LotteryObj上出错了,不知道从哪里调用,你得到了什么错误?我能把我的完整项目以某种方式发送给你吗,或者某种webex..Lol当我复制我的pojo并用你创建的pojo替换我的pojo时,会像它一样得到LotteryObj错误如果你有帐户,我不知道iTunes会在Github上发布你的项目
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;
}

}
Call<Lottery> getLottery();
Call<List<Lottery>> getLottery();
 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");
        @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());
        }
    });
}