Ресурсы $ NotFoundException При вызове Rest API с использованием RetroFit 2 - PullRequest
0 голосов
/ 01 июня 2018

Я вызываю REST Api с RetroFit 2 и пытаюсь отобразить его с помощью RecyclerView, но по какой-то причине я получаю исключение ресурсов $ NotFoundException.

Сгенерировано JSON, которое я хочу прочитать и отобразить вRecyclerView:

{
"generated_at": "2018-05-31T12:10:29+00:00",
"schema": "http:\/\/schemas.sportradar.com\/bsa\/soccer\/v1\/json\/endpoints\/soccer\/tournament_standings.json",
"tournament": {
    "id": "sr:tournament:17",
    "name": "Premier League",
    "sport": {
        "id": "sr:sport:1",
        "name": "Soccer"
    },
    "category": {
        "id": "sr:category:1",
        "name": "England",
        "country_code": "ENG"
    },
    "current_season": {
        "id": "sr:season:40942",
        "name": "Premier League 17\/18",
        "start_date": "2017-08-11",
        "end_date": "2018-05-14",
        "year": "17\/18"
    }
},
"season": {
    "id": "sr:season:40942",
    "name": "Premier League 17\/18",
    "start_date": "2017-08-11",
    "end_date": "2018-05-14",
    "year": "17\/18",
    "tournament_id": "sr:tournament:17"
},
"standings": [{
    "tie_break_rule": "In the event that two (or more) teams have an equal number of points, the following rules break the tie:\r\n1. Goal difference\r\n2. Goals scored",
    "type": "total",
    "groups": [{
        "team_standings": [{
            "team": {
                "id": "sr:competitor:17",
                "name": "Manchester City"
            },
            "rank": 1,
            "current_outcome": "Champions League",
            "played": 38,
            "win": 32,
            "draw": 4,
            "loss": 2,
            "goals_for": 106,
            "goals_against": 27,
            "goal_diff": 79,
            "points": 100
        }]
    }]
}]}

Итак, я создал ответ, который:

public class StandingsResponse {

@SerializedName("generated_at")
@Expose
private String mGeneratedAt;

@SerializedName("schema")
@Expose
private String mSchema;

@SerializedName("standings")
private List<Standings> mStandings;

public String getGeneratedAt() {
    return mGeneratedAt;
}

public void setGeneratedAt(String generatedAt) {
    mGeneratedAt = generatedAt;
}

public String getSchema() {
    return mSchema;
}

public void setSchema(String schema) {
    mSchema = schema;
}

public List<Standings> getStandings() {
    return mStandings;
}

public void setStandings(List<Standings> standings) {
    mStandings = standings;
}

В ответе есть список стандартов, в турнирной таблице POJO есть список групп:

public class Standings {

@SerializedName("groups")
@Expose
private List<Group> mGroup;

public List<Group> getGroup() {
    return mGroup;
}

public void setGroup(List<Group> group) {
    mGroup = group;
}

Группы POJO имеет список TeamStandings:

public class Group {

@SerializedName("team_standings")
@Expose
private List<TeamStandings> mTeamStandings;

public List<TeamStandings> getTeamStandings() {
    return mTeamStandings;
}

public void setTeamStandings(List<TeamStandings> teamStandings) {
    mTeamStandings = teamStandings;
}

И TeamStandings имеет все данные, которые я хочу отобразить:

public class TeamStandings {

@SerializedName("team")
@Expose
private Team mTeam;

@SerializedName("rank")
@Expose
private Integer mRank;

@SerializedName("played")
@Expose
private Integer mPlayed;

@SerializedName("win")
@Expose
private Integer mWin;

@SerializedName("draw")
@Expose
private Integer mDraw;

@SerializedName("lose")
@Expose
private Integer mLose;

@SerializedName("goals_for")
@Expose
private Integer mGoalsFor;

@SerializedName("goals_against")
@Expose
private Integer mGoalsAgainst;

@SerializedName("goal_diff")
@Expose
private Integer mGoalsDiff;

@SerializedName("points")
@Expose
private Integer mPoints;

public Integer getGoalsFor() {
    return mGoalsFor;
}

public void setGoalsFor(Integer goalsFor) {
    mGoalsFor = goalsFor;
}

public Integer getGoalsAgainst() {
    return mGoalsAgainst;
}

public void setGoalsAgainst(Integer goalsAgainst) {
    mGoalsAgainst = goalsAgainst;
}

public Integer getGoalsDiff() {
    return mGoalsDiff;
}

public void setGoalsDiff(Integer goalsDiff) {
    mGoalsDiff = goalsDiff;
}



public Integer getRank() {
    return mRank;
}

public void setRank(Integer rank) {
    mRank = rank;
}

public Integer getPlayed() {
    return mPlayed;
}

public void setPlayed(Integer played) {
    mPlayed = played;
}

public Integer getWin() {
    return mWin;
}

public void setWin(Integer win) {
    mWin = win;
}

public Integer getDraw() {
    return mDraw;
}

public void setDraw(Integer draw) {
    mDraw = draw;
}

public Integer getLose() {
    return mLose;
}

public void setLose(Integer lose) {
    mLose = lose;
}

public Integer getPoints() {
    return mPoints;
}

public void setPoints(Integer points) {
    mPoints = points;
}

public Team getTeam() {
    return mTeam;
}

public void setTeam(Team team) {
    mTeam = team;
}

Я вызываю ответ и правильноприкрепление тела ответа к адаптеру, но по какой-то причине происходит сбой приложения, и я вижу эту ошибку в Logcat:

 android.content.res.Resources$NotFoundException: String resource ID #0x1
    at android.content.res.Resources.getText(Resources.java:339)
    at android.widget.TextView.setText(TextView.java:5496)
    at com.mad.footstats.ui.adapters.StandingsAdapter.onBindViewHolder(StandingsAdapter.java:62)

Редактировать: это мой адаптер:

public class StandingsAdapter extends RecyclerView.Adapter<StandingsAdapter.StandingsViewHolder> {

private List<Standings> mStandings;
private int mRowLayout;
private Context mContext;

public class StandingsViewHolder extends RecyclerView.ViewHolder {
    LinearLayout standingsLayout;
    TextView teamRank, teamName, teamPlayed, teamWon, teamDraw,
            teamLose, teamFor, teamAgainst, teamGd, teamPts;


    public StandingsViewHolder(View itemView) {
        super(itemView);
        standingsLayout = itemView.findViewById(R.id.standings_layout);
        teamRank = itemView.findViewById(R.id.standings_team_rank);
        teamName = itemView.findViewById(R.id.standings_team_name);
        teamPlayed = itemView.findViewById(R.id.standings_team_played);
        teamWon = itemView.findViewById(R.id.standings_team_won);
        teamDraw = itemView.findViewById(R.id.standings_team_draw);
        teamLose = itemView.findViewById(R.id.standings_team_lost);
        teamFor = itemView.findViewById(R.id.standings_team_for);
        teamAgainst = itemView.findViewById(R.id.standings_team_against);
        teamGd = itemView.findViewById(R.id.standings_team_gd);
        teamPts = itemView.findViewById(R.id.standings_team_pts);
    }

}

public StandingsAdapter (List<Standings> standings, int rowLayout,
                         Context context){
    mStandings = standings;
    mRowLayout = rowLayout;
    mContext = context;
}

@Override
public StandingsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(mRowLayout, parent, false);
    StandingsViewHolder holder = new StandingsViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(StandingsViewHolder holder, int position) {
    holder.teamRank.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getRank());
    holder.teamName.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getTeam().getName());
    holder.teamPlayed.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getPlayed());
    holder.teamWon.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getWin());
    holder.teamDraw.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getDraw());
    holder.teamLose.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getLose());
    holder.teamFor.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getGoalsFor());
    holder.teamAgainst.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getGoalsAgainst());
    holder.teamGd.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getGoalsDiff());
    holder.teamPts.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getPoints());
}

@Override
public int getItemCount() {
    return mStandings.size();
}

1 Ответ

0 голосов
/ 01 июня 2018

Это исключение происходит потому, что вы задаете целочисленное значение в текстовом представлении, поэтому вам следует выполнить приведение типа String.

Например,

вы делаете

mTxtView.setText(mList.get(position).getMETHOD_WHICH_RETURN_INT())

.be do

mTxtView.setText(""+mList.get(position).getMETHOD_WHICH_RETURN_INT())

Вы должны быть

holder.teamRank.setText(""+mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getRank());


            holder.teamPlayed.setText(""+mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getPlayed());


            holder.teamWon.setText(""+mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getWin());


            holder.teamDraw.setText(mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getDraw());


            holder.teamLose.setText(""+mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getLose());



holder.teamFor.setText(""+mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getGoalsFor());


            holder.teamAgainst.setText(""+mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getGoalsAgainst());


            holder.teamGd.setText(""+mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getGoalsDiff());


            holder.teamPts.setText(""+mStandings.get(position).getGroup().get(position)
            .getTeamStandings().get(position).getPoints());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...