1

보고 API V4 Java 클래스에서 둘 이상의 측정 항목을 추출하고 싶습니다. 아래의 함수로 측정 기준과 측정 항목의 이름 : 나는 "주요"기능에서 "조지아"통과Google 애널리틱스보고 API V4 (자바)에서 두 개 이상의 측정 항목을 추출 할 수 없습니다.

예를 들어
private static ReportRequest createComplexRequest(java.lang.String startDate,java.lang.String endDate,ArrayList<java.lang.String> metrics,ArrayList<java.lang.String> dimensions, String pageToken){ 

DateRange dateRange = new DateRange(); 
dateRange.setStartDate(startDate); 
dateRange.setEndDate(endDate); 

//Create the Metric object ArrayList 
int metricsSize=metrics.size(); 
Metric[] metricsArray = new Metric[metricsSize]; 

for(int i=0;i<metricsSize;i++){ 
    Metric metric = new Metric() 
    .setExpression("ga:"+metrics.get(i)) 
    .setAlias(metrics.get(i));  
    metricsArray[i]=metric; 
} 

int dimensionsSize=dimensions.size(); 
Dimension[] dimensionsArray = new Dimension[dimensionsSize]; 

for(int i=0;i<dimensionsSize;i++){ 
    Dimension dimension = new Dimension() 
    .setName("ga:"+dimensions.get(i));  
    dimensionsArray[i]=dimension; 
}  

ReportRequest request = new ReportRequest() 
    .setViewId(VIEW_ID) 
    .setDateRanges(Arrays.asList(dateRange)) 
    .setDimensions(Arrays.asList(dimensionsArray))   
    .setMetrics(Arrays.asList(metricsArray)) 
    .setPageToken(pageToken) 
    .setPageSize(10000); 

    return request;  
} 

, 나는 "세션"과 "반송"통계를 추출하기 위해 노력하고있어. 이 문제를 해결하기 위해 노력하는 동안 metricHeaders.size()는 2 (내 측정 항목만큼)이지만 row.getMetrics()는 하나 ("세션"측정 항목) 만 반환한다는 것을 알게되었습니다. 아래는 내가 의미하는 바입니다. 나는 의도적으로 문제를 보여 다음과 같은 문제가 인쇄 기능 생성 : metricHeaders.size()가 2 만 메트릭은 하나의 메트릭은 "세션"통계와 목록이기 때문에

private static void printResponse(GetReportsResponse response) { 
for (Report report: response.getReports()) { 
    ColumnHeader header = report.getColumnHeader(); 
    List<String> dimensionHeaders = header.getDimensions(); 
    List<MetricHeaderEntry> metricHeaders = header.getMetricHeader().getMetricHeaderEntries(); 
    List<ReportRow> rows = report.getData().getRows(); 


    if (rows == null) { 
    System.out.println("No data found for " + VIEW_ID); 
    return; 
    } 

    for (ReportRow row: rows) { 
    List<String> dimensions = row.getDimensions(); 
    List<DateRangeValues> metrics = row.getMetrics(); 
    System.out.println("Metrics size:"+metrics.size()); 
    for (int i = 0; i < dimensionHeaders.size() && i < dimensions.size(); i++) { 
     System.out.println(dimensionHeaders.get(i) + ": " + dimensions.get(i)); 
    } 
    for(int l = 0;l<metricHeaders.size();l++) 
    {    
     System.out.println(metricHeaders.get(l).getName()); 
     DateRangeValues values = metrics.get(l); 
    } 
    } 
} 
} 

위의 기능은 분쇄를! 그것이 내가 얻는 이유입니다.

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 

왜 이런 일이 발생합니까? 도와주세요!!

답변

1

GA 개발자 가이드의 샘플 printResponse() 메소드에는 몇 가지 오류가 있습니다.

대신 다음 코드를보십시오 :

private static void printResponseCustom(GetReportsResponse response) { 
    for (Report report: response.getReports()) { 
    ColumnHeader header = report.getColumnHeader(); 
    List<String> dimensionHeaders = header.getDimensions(); 
    List<MetricHeaderEntry> metricHeaders = header.getMetricHeader().getMetricHeaderEntries(); 
    List<ReportRow> rows = report.getData().getRows(); 


    if (rows == null) { 
     System.out.println("No data found for " + VIEW_ID); 
     return; 
    } 

    for (ReportRow row: rows) { 
     List<String> dimensions = row.getDimensions(); 
     List<DateRangeValues> metrics = row.getMetrics(); 

     System.out.println("Metrics size:"+metrics.size()); 
     System.out.println("Metrics headers:"+metricHeaders.size());   
     for (int i = 0; i < dimensionHeaders.size() && i < dimensions.size(); i++) { 
     System.out.println(dimensionHeaders.get(i) + ": " + dimensions.get(i)); 
     } 

     int k = 0; 
     for (int j = 0; j < metricHeaders.size() && j < metrics.size(); 
      DateRangeValues values = metrics.get(j); 
      for (String value : values.getValues()) { 
       MetricHeaderEntry entry = metricHeaders.get(k); 
       System.out.println(entry.getName() + ": " + value); 
       k++; 
      }  
     } 
    } 
    } 
} 
+0

덕분에 많은 Stergios을! 실제로 그것은 Google의 코드 문제였습니다. 또한 HelloAnalytics.java 예제에서 더 많은 구문 문제가 있습니다. 예를 들어 가져온 모든 자바 라이브러리는 "com.google.api.services.analyticsreporting.v4"입니다. "com.google.analyticsreporting.v4"가 아닙니다. ! –

관련 문제