获得Json即200个对象,但在一个站点上只显示100个

时间:2014-03-21 20:16:17

标签: java arrays json twitch

我在我的Twitch IRC Bot工作,我们遇到了问题。

我们通过twitch API(json)收到很多信息,例如Who follow,dateOf .. viewercounts ..追随者的数量和类似的东西。

使用Follow-Function从整个列表中读取所有名称并将其全部设置到我们的数据库中。首先我们尝试只读取all和system.output它们但我们总是得到错误:org.json.JSONException:找不到JSONArray [100]。

我们注意到“0”也持有一个数组,所以我们将循环设置为0-99,它应该通过添加100+(下一个站点)来更改链接并再次读取JSON。然后它应该继续循环下一个站点。

以下是读取方法的主要代码。

我们尝试过调试,但我们找不到解决方案x(

MyBot主码代码段:

JSONObject follower = null;
String followername = null;
int listnumber;

offsetvalue = 0;

for(int i = 0; i < TwitchStatus.totalfollows; i++) { 

    try {
        follower = TwitchStatus.followerarray.getJSONObject(i);
    } catch (JSONException e2) {
        e2.printStackTrace();
    }        

    try {
        followername = follower.getJSONObject("user").getString("display_name");
    } catch (JSONException e) {
        e.printStackTrace();
    } 

    System.out.println("array ist: "+i +" " +followername);

    listnumber = offsetvalue+99; // 0+99

    if (i == listnumber){
        offsetvalue = offsetvalue+100;

        try {
            TwitchStatus.FollowerTicker();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    // System.out.println("Follower abgleichs-Liste: "+followername);        
}

还有读者方法:

////////////////////////////////////////////////////////////////////////////////////
// Twitch Follower Ticker
////////////////////////////////////////////////////////////////////////////////////

private String readAll4(Reader rd) throws IOException {
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) {
        sb.append((char) cp);
    }
    return sb.toString();
  }

  public JSONObject readJsonFromUrl4(String url) throws IOException, JSONException {
    InputStream is = new URL(url).openStream();
    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        String jsonText = readAll4(rd);
        JSONObject json = new JSONObject(jsonText);
        return json;
    } finally {
        is.close();
    }
  }

  public static void FollowerTicker() throws IOException, JSONException {
    json = readJsonFromUrl2("https://api.twitch.tv/kraken/channels/dotastarladder_en/follows?direction=DESC&limit=100&offset="+MyBot.offsetvalue+"");

    followerarray = json.getJSONArray("follows");

    {
        JSONObject follower = followerarray.getJSONObject(0);
        neuerfollower = follower.getString("created_at");
        fname = follower.getJSONObject("user").getString("display_name");  
        totalfollows = json.getInt("_total");
    }
} 

1 个答案:

答案 0 :(得分:3)

来自API docs

的注释
  

limit可选整数数组中的最大对象数。默认值为25.最大值为100.

那么,你做什么的?当然,查询下一个!这是链接页面中的JSON位,以及下一个URL的示例。基本上,你只是放入一个偏移量,但URL已经声明了它,所以......

{
  "_total": 1234,
  "_links": {
    "next": "https://api.twitch.tv/kraken/channels/test_user1/follows?direction=DESC&limit=25&offset=25",

我如何解决这个问题是这样的:

  1. 创建一个AsyncTask,它接受URL来解析JSON文本。
  2. 收到数据后,启动新任务以阅读下一个任务。
  3. 读取此JSON字符串中收到的所有内容
  4. 根据需要下载后编译所有内容。