Исключение Google App Engine - текущий поток не связан ни с одним запросом и не является фоновым потоком - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь поразить аналитику Google с помощью API-интерфейсов GAE из кросс-платформенного настольного Java-приложения. Я следовал примеру кода из github, но из-за проблем с потоками запрос не выполняется.

https://github.com/GoogleCloudPlatform/appengine-googleanalytics-java/blob/master/src/main/java/com/google/appengine/analytics/tracking/GoogleAnalyticsTracking.java

Вот мой пример кода:

ThreadManager.currentRequestThreadFactory().newThread(new Runnable() {
    @Override
    public void run() {
        try {
            GoogleAccountTracker.trackEventToGoogleAnalytics("category1", "action1", "label1", "value1");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
});
public static int trackEventToGoogleAnalytics(String category, String action, String label, String value) throws IOException {
    Application.LOGGER.info("trackEventToGoogleAnalytics() started");

    Map<String, String> map = new LinkedHashMap<>();
    map.put("v", "1");             // Version.
    map.put("tid", gaTrackingId);
    map.put("cid", gaClientId);
    map.put("t", "event");         // Event hit type.
    map.put("ec", encode(category, true));
    map.put("ea", encode(action, true));
    map.put("el", encode(label, false));
    map.put("ev", encode(value, false));

    HTTPRequest request = new HTTPRequest(GA_URL_ENDPOINT, HTTPMethod.POST);
    request.addHeader(CONTENT_TYPE_HEADER);
    request.setPayload(getPostData(map));

    HTTPResponse response = urlFetchService.fetch(request);

    byte[] content = response.getContent();
    URL finalUrl = response.getFinalUrl();

    // 200, 404, 500, etc
    int responseCode = response.getResponseCode();
    List<HTTPHeader> headers = response.getHeaders();

    for(HTTPHeader header : headers) {
        String headerName = header.getName();
        String headerValue = header.getValue();
        Application.LOGGER.info(headerName + " " + headerValue);
    }

    Application.LOGGER.info("trackEventToGoogleAnalytics() ended");

    return 0; //httpResponse.getResponseCode();
}

Исключение, которое я получаю:

Caused by: java.lang.NullPointerException: Current thread is not associated with any request and is not a background thread
    at com.google.appengine.api.ThreadManager.getCurrentEnvironmentOrThrow(ThreadManager.java:106)
    at com.google.appengine.api.ThreadManager.currentRequestThreadFactory(ThreadManager.java:47)
...