@Override
  public void bindView(View view, final Context context, Cursor cursor) {
    MyLog.entry();

    final ViewHolder viewHolder = new ViewHolder(view);
    final CapturedPlayerInfoModel model = CapturedPlayerInfoProviderHelper.cursorToModel(cursor);

    final String lineName =
        context.getString(
            R.string.view_captured_info_item_name, model.getName(), model.getLastUpdate());
    viewHolder.nameTextView.setText(lineName);

    final String lineRegion =
        context.getString(R.string.view_captured_info_item_region, model.getRegion().name());
    viewHolder.regionTextView.setText(lineRegion);

    final String lineRank =
        context.getString(R.string.view_captured_info_item_rank, model.getRank(), model.getExp());
    viewHolder.rankTextView.setText(lineRank);

    final String lineMaxRank =
        context.getString(
            R.string.view_captured_info_item_maxrank, model.getStaminaMax(), model.getCostMax());
    viewHolder.maxRankTextView.setText(lineMaxRank);

    final String lineMaxStats =
        context.getString(
            R.string.view_captured_info_item_maxstats, model.getCardMax(), model.getFriendMax());
    viewHolder.maxStatsTextView.setText(lineMaxStats);

    final String lineCurrency =
        context.getString(
            R.string.view_captured_info_item_currency, model.getCoins(), model.getStones());
    viewHolder.currencyTextView.setText(lineCurrency);

    MyLog.exit();
  }
  @Override
  protected GetPlayerDataApiCallResult parseJsonObject(JSONObject json)
      throws JSONException, ParsingException {
    MyLog.entry();

    final GetPlayerDataApiCallResult model = new GetPlayerDataApiCallResult();
    final int res = json.getInt("res");
    model.setRes(res);

    if (model.isResOk()) {
      final CapturedPlayerInfoModel playerInfo = new CapturedPlayerInfoModel();
      // "friendMax": 30, "cardMax": 30, "name": "NeraudMule", "lv": 19, "exp": 29209, "cost": 32,
      // "sta": 26, "sta_max": 26, "gold": 5, "coin": 63468, "curLvExp": 27188, "nextLvExp": 30954,
      playerInfo.setLastUpdate(new Date());
      playerInfo.setFriendMax(json.getInt("friendMax"));
      playerInfo.setCardMax(json.getInt("cardMax"));
      playerInfo.setName(json.getString("name"));
      playerInfo.setRank(json.getInt("lv"));
      playerInfo.setExp(json.getLong("exp"));
      playerInfo.setCostMax(json.getInt("cost"));
      playerInfo.setStamina(json.getInt("sta"));
      playerInfo.setStaminaMax(json.getInt("sta_max"));
      playerInfo.setStones(json.getInt("gold"));
      playerInfo.setCoins(json.getLong("coin"));
      playerInfo.setCurrentLevelExp(json.getLong("curLvExp"));
      playerInfo.setNextLevelExp(json.getLong("nextLvExp"));
      playerInfo.setRegion(region);

      model.setPlayerInfo(playerInfo);

      // "card"
      final List<MonsterModel> monsters = new ArrayList<MonsterModel>();
      final JSONArray cardResults = json.getJSONArray("card");
      for (int i = 0; i < cardResults.length(); i++) {
        MyLog.info(" - card #" + i + " : " + cardResults.get(i));
        final Object cardResult = cardResults.get(i);

        final MonsterModel monster;
        if (cardResult instanceof JSONObject) {
          monster = parseMonsterFromObject((JSONObject) cardResult);
        } else {
          monster = parseMonsterFromArray((JSONArray) cardResult);
        }

        monsters.add(monster);
      }
      model.setMonsterCards(monsters);

      // "friends"
      final List<PADCapturedFriendModel> friends = new ArrayList<PADCapturedFriendModel>();
      final JSONArray friendResults = json.getJSONArray("friends");
      for (int i = 0; i < friendResults.length(); i++) {
        final JSONArray friendResult = (JSONArray) friendResults.get(i);
        final PADCapturedFriendModel friend = parseFriend(friendResult);

        friends.add(friend);
      }
      model.setFriends(friends);
    }

    MyLog.exit();
    return model;
  }