首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:Java快速启动错误

:Java快速启动错误
EN

Stack Overflow用户
提问于 2018-04-12 03:17:35
回答 1查看 1K关注 0票数 0

我正在尝试使用Java访问中的数据。

我遵循":用于安装应用程序的Java快速启动“教程,我做了它告诉您的所有事情,我得到了以下问题:

代码语言:javascript
复制
com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly
WARNING: unable to change permissions for everybody: C:\Users\<user>\.store\hello_analytics
com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly
WARNING: unable to change permissions for owner: C:\Users\timst\.store\hello_analytics
java.lang.NullPointerException
          at java.io.Reader.<init>(Reader.java:78)
          at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
          at com.example.demo.HelloAnalytics.initializeAnalytics(HelloAnalytics.java:60)
          at com.example.demo.HelloAnalytics.main(HelloAnalytics.java:44)

我尝试使用client_secret.json的完整路径。我试过用我在网上发现的不同的方法,但似乎都没有用。

在对这个错误感到沮丧之后,我尝试了":服务帐户的Java快速启动“教程。

但在这里,我的问题是我不能为我可以访问的帐户、属性或视图添加用户。我可以访问其他人的分析帐户,我只能从帐户中删除自己。

我使用的所有代码都来自教程,使用Intellijgradle

tl;dr;我想要做的就是使用reporting访问我所有帐户的分析数据,这样我就可以将所有这些数据放到我自己的数据库中,并在我的其他项目中使用这个数据库。谷歌提供的教程不适用于我。(这些数据主要是Google数据。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-13 09:07:40

因此,警告并不是问题所在,这是一个众所周知的问题,因为它不能在windows上正常工作。

java.lang.NullPointerException是因为我调用的配置文件没有给定度量的数据行。因此,调用的返回值没有.getRows()方法,因为没有行值。

你应该检查行的第一排,

代码语言:javascript
复制
GaData results;
 if (null != results) {
     if(results.get("rows") != null){
          if (!results.getRows().isEmpty()){
               //do something with the rows exp.
               for (List<String> row : results.getRows()) {
                    for (int i=0; i<results.getColumnHeaders().size();i++) {
                        List<GaData.ColumnHeaders> headers = results.getColumnHeaders();
                        System.out.println( headers.get(i).getName()+": " + row.get(i));
                    }
                }
          }
     }
}

在这个示例中,我还使用了ColumnHeaders,您也应该首先检查。

检查我访问的每个帐户以及每个webProperty和配置文件也更容易,而不仅仅是每个帐户的第一个值。

而且,查询浏览器非常有用。您应该使用它来检查可以使用的度量标准和维度。

下面是我的完整HelloAnalytics类,我只需将可能有用的所有内容打印到控制台上,我还使用多个度量标准和来自Google AdWords的维度(在getResults方法中):

代码语言:javascript
复制
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.analytics.Analytics;
import com.google.api.services.analytics.AnalyticsScopes;
import com.google.api.services.analytics.model.*;

import java.io.*;
import java.util.ArrayList;
import java.util.List;


/**
 * A simple example of how to access the Google Analytics API.
 */
public class HelloAnalytics {
    // Path to client_secrets.json file downloaded from the Developer's Console.
    // The path is relative to HelloAnalytics.java.
    private static final String CLIENT_SECRET_JSON_RESOURCE = "/client_secret.json";
    // The directory where the user's credentials will be stored.
    private static final File DATA_STORE_DIR = new File("out/DataStore/hello_analytics");
    private static final File OUTPUT_FILE = new File("out/DataStore/output.text");

    private static final String APPLICATION_NAME = "Online Marketing Buddy";
    private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
    private static NetHttpTransport httpTransport;
    private static FileDataStoreFactory dataStoreFactory;

    public static void main(String[] args) {
        try {

            Analytics analytics = initializeAnalytics();
            getProfileIds(analytics);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Analytics initializeAnalytics() throws Exception {

        httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);

        // Load client secrets.
        InputStream in =
                HelloAnalytics.class.getResourceAsStream(CLIENT_SECRET_JSON_RESOURCE);
        GoogleClientSecrets clientSecrets =
                GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

        // Set up authorization code flow for all auth scopes.
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow
                .Builder(httpTransport, JSON_FACTORY, clientSecrets,AnalyticsScopes.all())
                .setDataStoreFactory(dataStoreFactory)
                .build();

        // Authorize.
        Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver())
                .authorize("user");

        // Construct the Analytics service object.
        Analytics response = new Analytics
                .Builder(httpTransport, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME).build();

        return response;
    }

    private static void getProfileIds(Analytics analytics) throws IOException {
        // Get the all view (profile) IDs for the authorized user.
        List<String> profileIds = new ArrayList<>();

        // Query for the list of all accounts associated with the service account.
        Accounts accounts = analytics.management().accounts().list().execute();

        if (accounts.getItems().isEmpty()) {
            System.err.println("No accounts found");
        } else {
            for (Account account : accounts.getItems()) {
                System.out.println("account: " + account.getName());
                String accountId = account.getId();

                // Query for the list of properties associated with the each account.
                Webproperties properties = analytics.management().webproperties()
                        .list(accountId).execute();

                if (properties.getItems().isEmpty()) {
                    System.err.println("No properties found for accountId: " + accountId);
                } else {
                    for (Webproperty webproperty : properties.getItems()) {
                        System.out.println("\nwebproperty: " + webproperty.getName());
                        String webpropertyId = webproperty.getId();

                        // Query for the list views (profiles) associated with the property.
                        Profiles profiles = analytics.management().profiles()
                                .list(accountId, webpropertyId).execute();

                        if (profiles.getItems().isEmpty()) {
                            System.err.println("No views (profiles) found for accoundId: " + accountId + "and webpropertyId: " + webpropertyId);
                        } else {
                            // Return the first (view) profile associated with the property.
                            for (Profile profile : profiles.getItems()) {
                                System.out.println("\nprofileId added for profile: " + profile.getName());
                                profileIds.add(profile.getId());
                                printResults(getResults(analytics,profile.getId()), profile.getId());
                            }
                        }
                        System.out.println("---------- ---------- end webproperty: " + webproperty.getName() + "---------- ----------");
                    }
                }
                System.out.println("---------- ---------- end account: " + account.getName() + "---------- ----------");
            }
        }
    }

    private static GaData getResults(Analytics analytics, String profileId) throws IOException {
        // Query the Core Reporting API for the number of sessions
        // in the past 30 days.
        GaData data = analytics.data().ga()
                .get("ga:" + profileId, "30daysAgo", "yesterday", "ga:adClicks, ga:adCost, ga:transactions, ga:transactionRevenue, ga:users, ga:sessions")
                .setDimensions("ga:adwordsCampaignID")
                .execute();
        return data;
    }

    private static void printResults(GaData results, String profile) {
        // Parse the response from the Core Reporting API for
        // the profile name and number of sessions.
        if (null != results) {
            System.out.println("View (Profile: " + profile + ") Name: "
                    + results.getProfileInfo().getProfileName() + "\n");
            if (results.get("rows") != null && results.get("columnHeaders") != null) {
                if (!results.getRows().isEmpty() && !results.getColumnHeaders().isEmpty()) {
                    for (List<String> row : results.getRows()) {
                        for (int i=0; i<results.getColumnHeaders().size();i++) {
                            List<GaData.ColumnHeaders> headers = results.getColumnHeaders();
                            System.out.println( headers.get(i).getName()+": " + row.get(i) + "\n");
                        }
                        System.out.println("---------- ---------- ----------\n");
                    }
                } else {
                    System.out.println("No rows or columHeaders empty\n");
                }
            } else {
                System.out.println("No rows or columHeaders\n");
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49787420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档