【问题标题】:Parsing a List<List<String>> in Android?在 Android 中解析 List<List<String>>?
【发布时间】:2012-01-08 17:09:48
【问题描述】:

我正在为 Android 使用 Google Java Client Library 开发自定义 Adsense 报告工具。我已成功通过身份验证,可以对服务器进行 API 调用。但是现在当我收到响应时,我不知道如何解析它并将结果正确地显示给用户。

根据 javaDocs,AdsenseReportsGenerateResponse.getRows() 生成一个列表> 但是我有点迷失如何正确解析它来获取:

-Today's earnings
-Yesterday's earnings
-Last 7 days
-Last month
-From the beginning of time

这是我与问题相关的部分代码

        Reports.Generate request = adsense.reports().generate(startDate, endDate);    

        request.setMetric(Arrays.asList("PAGE_VIEWS", "AD_REQUESTS", "AD_REQUESTS_COVERAGE", "CLICKS",
                "AD_REQUESTS_CTR", "COST_PER_CLICK", "AD_REQUESTS_RPM", "EARNINGS"));

        request.setDimension(Arrays.asList("DATE", "WEEK", "MONTH"));    
        request.setSort(Arrays.asList("+DATE"));

        AdsenseReportsGenerateResponse response = request.execute();

        //TODO: Here be dragons
        response.getRows();

编辑:这是提到getRow()的javaDoc

嗯,这个网站上似乎没有人可以帮忙?!

【问题讨论】:

  • 根据你的链接,getRows() 返回String[][]
  • 是的,它写成 String[][] 但它实际上返回 List>

标签: java android google-api google-api-java-client adsense


【解决方案1】:

您应该会发现我们的示例代码很有用:http://code.google.com/p/google-api-java-client/wiki/APIs#AdSense_Management_API

即,这是您感兴趣的文件:http://code.google.com/p/google-api-java-client/source/browse/adsense-cmdline-sample/src/main/java/com/google/api/services/samples/adsense/cmdline/GenerateReport.java?repo=samples

这是打印输出的 sn-p 代码。请注意,这是一个命令行应用程序,但应该很容易适应:

if ((response.getRows() != null) && !response.getRows().isEmpty()) {
  // Display headers.
  for (AdsenseReportsGenerateResponseHeaders header : response.getHeaders()) {
    System.out.printf("%25s", header.getName());
  }
  System.out.println();

  // Display results.
  for (List<String> row : response.getRows()) {
    for (String column : row) {
      System.out.printf("%25s", column);
    }
    System.out.println();
    }

  System.out.println();
} else {
  System.out.println("No rows returned.");
}

至于获取不同时间段的数据,您可能应该运行不同的报告,而不是将它们全部塞进一份,因为这需要不同的开始日期和结束日期。以下是它的工作原理:

  • 今天的收入:将开始和结束日期设置为今天,将维度列表设置为 DATE
  • 昨天的收入:将开始和结束日期设置为昨天,将维度列表设置为 DATE
  • 过去 7 天:如果您需要每天的数据,则将开始日期设置为 7 天前,将结束日期设置为今天,并将维度列表设置为 DATE。如果您想汇总统计信息,您可能需要自己计算,因为 WEEK 和 MONTH 指的是日历周和月,而不是过去 7 天。
  • 上个月:上个月 1 日的开始日期,当月最后一天的结束日期,维度 MONTH。
  • 所有时间:您希望如何汇总?每月?然后将开始日期设置为 1980 年 1 月 1 日,结束日期设置为今天,维度设置为 MONTH。

这篇博文应该有助于更好地理解报告概念:http://adsenseapi.blogspot.com/2011/11/adsense-management-api-diving-into.html

如果您需要其他帮助,请告诉我!

【讨论】:

  • 您好,感谢您的详细回答,在问这个问题之前,我实际上阅读了上述所有示例和博客文章。但是,如果我们可以将所有报告合并为一个而不是分开,您不认为它会更快更有效吗?考虑到它是移动设备
  • 您可以在同一个报告中放置多个内容,是的,但是由于报告日期和聚合(维度)之间的相互作用,您有时会需要不同的内容。您将如何运行获取今天的数据(每天汇总)并同时获取您帐户的所有历史数据(每月汇总)的报告?最多,您应该能够为每个聚合级别生成一份报告,但除此之外的任何事情都会很困难。
  • 好吧,假设我只想要一个数组中最近 7 天的收入,这样我就可以在列表视图中向用户显示它们,我如何从响应中获取数据?我的意思是,我想将收入与日期分开(如果我使用 startdate=last7days 提出请求,则响应也将包括日期)
  • 您总是会在报表中获得维度,否则您将无法分辨哪个值是哪个。为什么不直接遍历返回的数组并逐步填充列表视图?
  • 因为我只想循环收入并在列表视图中显示它们排除日期,我希望你明白我的意思。
【解决方案2】:

据我了解,它不是List&lt;List&gt;。试试这个:

String[][] array = response.getRows();

for (int i = 0; i < array.getSize(); i++){

    String dimension = array[i][0];
    String metric = array[i][1];

    //Do what you want with them

}

我写这篇文章是因为 API 说它有一个维度列表,据我了解,其中一个值用于字符串,一个值用于度量。

如果您希望每行有多个单元格(我相信 API 不能那样工作),您需要在内部添加另一个单元格并获取当前列表的大小,可能类似于 array[i].getSize()

如果对您没有帮助,请回帖。

编辑:我现在明白了。试试这个:

List list = response.getRows();

for (int i = 0; i < list.size(); i++){

List<String> list2 = list.get(i);

for (int j = 0; j < list2.size(); j++){
String value = list2.get(j);
//Do what you want
}

}

【讨论】:

  • 我已经试过了。 Error: Type Mismatch: cannot convert from &lt;List&lt;List&lt;String&gt;&gt; to String[][]
  • 查看我的编辑。我认为您需要假设每个位置上的属性,但这似乎不正确。
  • 我试过了,值是返回所有列/行中的所有数据。示例:`request.setMetric(Arrays.asList("EARNINGS")); request.setDimension(Arrays.asList("MONTH")); ..... 字符串值 = list2.get(j); Log.v(TAG, value);` 输出:` 01-09 09:03:12.205: V/MyActivityValue(449): 2011-10 01-09 09:03:12.205: V/MyActivityValue(449): 36.92 01 -09 09:03:12.205: V/MyActivityValue(449): 2011-11 01-09 09:03:12.205: V/MyActivityValue(449): 58.40 01-09 09:03:12.205: V/MyActivityValue(449) : 2011-12 01-09 09:03:12.205: V/MyActivityValue(449): 52.87 01-09 09:03:12.205: V/MyActivityValue(449): 2012-01 `
  • 我明白了。好吧,我不确定 API 是如何工作的。如果它显示一些东西,可能你没有正确设置值。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多