将数据从Android流式传输到BigQuery时出现错误200(取消作业)

时间:2017-11-06 22:08:43

标签: android google-bigquery

我一直试图在我的应用程序中构建一些功能,也允许将用户生成的数据(EEG记录)发送到中央BigQuery数据库。

之前我从未在Java中使用过任何网络代码,因此我避免使用推荐的基于POST或REST的策略hereBigQuery Java client library似乎正是我所需要的,尽管我完全感到困惑,为什么它不能正式支持Android。

尽管如此,我还是偶然发现了example Android app(来自谷歌),它承诺完全符合我对BigQuery Client库的要求。我将它合并到我的应用程序中如下:

// .... in an AsyncTask
@Override
protected String doInBackground(String... params) {
    String CSV_CONTENT = params[0];
    try {
        AssetManager am = MainApplication.getInstance().getAssets();
        InputStream isCredentialsFile = am.open(CREDENTIALS_FILE);
        BigQuery bigquery = BigQueryOptions.builder()
                .authCredentials(AuthCredentials.createForJson(isCredentialsFile))
                .projectId( PROJECT_ID )
                .build().service();

        TableId tableId = TableId.of(DATASET,TABLE);
        Table table = bigquery.getTable(tableId);

        int num = 0;
        Log.d("Main", "Sending CSV: ");
        WriteChannelConfiguration configuration = WriteChannelConfiguration.builder(tableId)
                .formatOptions(FormatOptions.csv())
                .build();
        try (WriteChannel channel = bigquery.writer(configuration)) {
            num = channel.write(ByteBuffer.wrap(CSV_CONTENT.getBytes(StandardCharsets.UTF_8)));
        } catch (Exception e) {
            Log.d("Main", e.toString());
        }
        Log.d("Main", "Loading " + Integer.toString(num) + " bytes into table " + tableId);

    } catch (Exception e) {
        Log.d("Main", "Exception: " + e.toString());
    }

    return "Done";
}

此操作没有任何错误,并触发Google云端存储检测到的API调用。但是,它每次都返回错误200(作业被取消)。我不明白这是怎么回事,因为我没有在代码中做任何取消请求的事情,而且我也不知道如何将取消呼叫的异步任务取消。

这只是我复制的一个糟糕的示例应用程序和BigQuery客户端的错误用法吗?如果是这样,那么从Android发送数据到BigQuery的最佳方式是什么?

0 个答案:

没有答案