Java 如何让API在Android中返回整数列表?
再一次,我对编码还不熟悉,我正试图为我的机器人团队编写一个Android应用程序。我已经走得很远了,但我一直在努力只返回一些球队的排名 这是我当前的onClick代码Java 如何让API在Android中返回整数列表?,java,android,api,int,Java,Android,Api,Int,再一次,我对编码还不熟悉,我正试图为我的机器人团队编写一个Android应用程序。我已经走得很远了,但我一直在努力只返回一些球队的排名 这是我当前的onClick代码 public void onClick(final View v) { v.setEnabled(false); switch (v.getId()) { case R.id.btnGetRanks: try { TextView textHe
public void onClick(final View v) {
v.setEnabled(false);
switch (v.getId()) {
case R.id.btnGetRanks:
try {
TextView textHeyo = (TextView) getView().findViewById(R.id.textGetRanks);
textHeyo.setText(new EventRanking().execute(tba).get().toString());
} catch ( ExecutionException | InterruptedException e) {
e.printStackTrace();
}
break;
//... more code not related to issue ...
}
// ...
}
这是我的背景(正如我所说,我是新的)
更具体地说,这就是我想要得到的
/**
* Makes API requests with the subdirectory <code>/event/{eventKey}/rankings</code>
*
* @param eventKey TBA Event Key, e.g. <code>2016nytr</code>
* @return A list of team rankings for the event
* @throws IOException
*/
public EventRankings getRankings(String eventKey) throws IOException {
String directory = "/event/" + eventKey + "/rankings";
return Deserializer.toEventRankings(tba.getDataTBA(directory).getJson());
}
这就是你可以通过EventRankings获得的东西
/**
* The event rankings and tiebreaker information for an event
*/
@Value
public class EventRankings {
/**
* List of rankings at the event
*/
public Ranking[] rankings;
/**
* List of year-specific values provided in the `sort_orders` array for each team.
*/
public SortOrderInfo[] sort_order_info;
/**
* The Sort order of the rankings for a particular year
*/
@Value
public class SortOrderInfo {
/**
* Name of the field used in the <code>sort_order</code> array.
*/
public String name;
/**
* Integer expressing the number of digits of precision in the number provided in sort_orders.
*/
public int precision;
}
这就是我要回来的,但我只想要球队号码和他们的排名
好的,当您使用
EventRankings getRankings(String eventKey)
并且想要一个包含团队编号和排名的对象时,您会得到一个对象EventRankings
根据您共享的图像:
事件排名
- 拥有
排名的集合
具有排名
int
排名
还有一个字符串Ranking
(我猜是“team number”team\u key
map
2. 如果你知道排名是独一无二的,你也可以用另一种方式绘制地图:
Map<String, Int> rankedTeams = new HashMap<>();
for(Ranking ranking : eventsRankings.rankings) {
rankedTeams.put(ranking.rank, ranking.teamKey);
}
3. 最后,如果您不想通过排名或名称轻松查找,可以创建一个新对象列表,可能是
List
摘自:
非常感谢,我可以问一下第一个和第二个问题吗,代码在哪里?就像我猜的是哪一部分。对不起!我对
ASyncTask
的doInBackground
非常陌生,您可以将其更改为返回不同类型的对象(类型args
中的第三个参数将从EventRankings
更改为您选择的任何参数。)我收到此错误:java.lang.NullPointerException:尝试在com.example.scouttingApp4.RankingsFragment.onClick上的空对象引用上调用虚拟方法“java.lang.String java.lang.Object.toString()(RankingsFragment.java:50)那么第50行是什么呢?看起来您的ASyncTask现在可能返回null
。我回答了您的问题-您可能需要将此标记为已回答并打开question@Cail如果这回答了您的问题,请将其标记为已回答
/**
* The event rankings and tiebreaker information for an event
*/
@Value
public class EventRankings {
/**
* List of rankings at the event
*/
public Ranking[] rankings;
/**
* List of year-specific values provided in the `sort_orders` array for each team.
*/
public SortOrderInfo[] sort_order_info;
/**
* The Sort order of the rankings for a particular year
*/
@Value
public class SortOrderInfo {
/**
* Name of the field used in the <code>sort_order</code> array.
*/
public String name;
/**
* Integer expressing the number of digits of precision in the number provided in sort_orders.
*/
public int precision;
}
EventRankings eventRankings = getRankings("eventKey");
Map<String, Int> teamsRanked = new HashMap<>();
for(Ranking ranking : eventsRankings.rankings) {
teamsRanked.put(ranking.teamKey, ranking.rank);
}
for (Map.Entry<String, Int> entry : teamsRanked.entrySet()) {
Log.d("TUT", entry.getKey() + ":" + entry.getValue());
}
Log.d("TUT", "frc1323 is ranked: " + teamsRanked.get("frc1323"));
Map<String, Int> rankedTeams = new HashMap<>();
for(Ranking ranking : eventsRankings.rankings) {
rankedTeams.put(ranking.rank, ranking.teamKey);
}
Log.d("TUT", "Ranked #1 is: " + rankedTeams.get(1));
Log.d("TUT", "Ranked #2 is: " + rankedTeams.get(2));
Log.d("TUT", "Ranked #3 is: " + rankedTeams.get(3));
class Result {
private final String teamName;
private final int rank;
public Result(String teamName, int rank) {
this.teamName = teamName;
this.rank = rank;
}
public String getTeamName() {
return teamName;
}
public int getRank() {
return rank;
}
}
List<Result> results = new HashMap<>();
for(Ranking ranking : eventsRankings.rankings) {
results.add(new Result(ranking.teamKey, ranking.rank));
}
for(Result result : results) {
Log.d("TUT", result.getTeamName() + " : " + result.getRank());
}