Я пытаюсь получить данные из блоб-файла, который я получаю с помощью Samsung S-health SDK. Что я на самом деле делаю:

Cursor c = null;
int i = 0;
c = result.getResultCursor();

if (c != null) {
    while ( c.moveToNext() ) {
        byte[] live_data = c.getBlob( c.getColumnIndex( HealthConstants.Exercise.LIVE_DATA ) );
        if ( live_data != null ) {

            // Do something with data.


        } else {
            Log.d(APP_TAG, "there is no live data.");
        }
    }
} else {
    Log.d(APP_TAG, "There is no result.");
}

«live_data» представляет собой сжатый файл, содержащий JSON со всеми данными. Я пытался распаковать его с ZipInputStream безуспешно. Как я могу сделать?

1
Labo29 28 Май 2017 в 23:03

2 ответа

Лучший ответ

Наконец я нашел решение после нескольких попыток. Проблема заключалась в том, что BLOB-файл был файлом GZIP. Ниже приведен простой код для распаковки байтового массива (в моем случае live_data):

ByteArrayInputStream inputStream = new ByteArrayInputStream(live_data);
GZIPInputStream gzipInputStream = new GZIPInputStream(inputStream);
BufferedReader bf = new BufferedReader(new 
InputStreamReader(gzipInputStream, "UTF-8"));
String outStr = "";
String line;
while ((line=bf.readLine())!=null) {
     outStr += line;
}

Где outStr - содержимое файла, который я хотел получить, а live_data - байтовый массив BLOB-объектов. Я надеюсь, что это может помочь и другим.

1
Labo29 2 Июн 2017 в 14:37


Вы пробовали распаковать файл BLOB с помощью WinRar? Я пытался это делать в течение многих дней, и, наконец, я изменил расширение на .rar, затем я получил в 10 раз больше открытого текста с образцами данных (например: {"калорийность": 0.0, "расстояние": 0.0, "heart_rate": 89.0, "start_time": 1521297002178 } , )

У меня S-Health 5.16.0.043 и старше DataViewer1.2.0.apk.

0
thimoo 17 Мар 2018 в 19:23