Проблемы в результатах JSON, вызывающих API JAWBONE

Я разрабатываю приложение для Android для анализа данных UP Band. Используя пример, приведенный в UP SDK для Android, на данный момент я могу получить данные тренда в виде объекта JSON. Проблема в том, что этот объект JSON искажен. Фактически, когда я пытаюсь десериализовать данные тренда с помощью:

JsonElement je = new JsonParser().parse(o.toString());

Я получаю следующую ошибку:

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: ожидаемое значение в строке...

Более того, проверяя результат вызова API, я получаю:

{meta ={user_xid =MASKED, сообщение =OK, код = 200.0, время =1.430319261E9}, данные ={самые ранние =2.0130408E7, данные =[[2.0150423E7, {e_protein=null, вес =78.0, goal_body_weight_intent=null, body_fat=null, m_distance=8073.0, s_awakenings=null, высота =1.72, m_lcat=1336.0, goal_body_weight=null, s_quality=null, m_steps=10760.0, e_cholesterol=null, s_light=null, e_sat_fat=null = timetime 0.0, e_calcium=null, s_bedtime=null, n_awakenings=null, n_light=null, s_awake_time=null, pal=null, n_duration=null, m_lcit=9660.0, m_active_time=5717.0, e_unsat_fat=null, m_alal = 513, e_alal = 513, e_calory = 513, e_calory = 513, e_alal = 513, e_alal = 5, m_calors = 5 bmr=1426.58256449, m_total_calories=1959.2927158, n_sound=null, e_sugar=null, e_sodium=null, s_awake=null, s_asleep_time=null, s_duration=null, n_awake=null, age=69,827397260 siber = ell = ell = ell = ell = ell = ell_s_s_S3 ноль, n_quality= ноль, n_awake_time= ноль, пол =0.0, n_asleep_time= ноль}], [2.0150424E7, {e_protein= ноль, вес = 78.0, goal_body_weight_intent = ноль, body_fat = ноль, m_distance=9641.0, s_awakenings= ноль, высота =1.72, m_lcat=1145.0, goal_body_weight= ноль, s_quality = ноль, m_steps=12657.0, e_cholesterol= ноль, s_light = ноль, e_sat_fat = ноль, n_bedtime = ноль, ell = m_work, m_work s_bedtime=null, n_awakenings=null, n_light=null, s_awake_time=null, pal=null, n_duration=null, m_lcit=11460.0, m_active_time=6508.0, e_unsat_fat=null, m_calories=632.988689047ll = 0, m_alal = 0, s_95 = 82.57 m_al_095 2045.56821047, n_sound=null, e_sugar=null, e_sodium=null, s_awake=null, s_asleep_time=null, s_duration=null, n_awake=null, age=69.8301369863, e_carbs=null, e_fiber=null = null, null, null, nu_s, n_s n_awake_time = ноль, пол =0.0, n_asleep_time= ноль}], [2.0150425E7, {e_protein= ноль, вес = 78.0, goal_body_weight_intent = ноль, body_fat = ноль, m_distance=21643.0, s_awakenings= ноль, рост = 1.72.0, 1.55 м, goal_body_weight = ноль, s_quality = ноль, e_calories = ноль, e_cholesterol = ноль, s_light = ноль, e_sat_fat = ноль, n_bedtime = ноль, m_workout_time=0.0, e_calci ит = нуль, s_bedtime = NULL, n_awakenings = NULL, n_light = NULL, s_awake_time = NULL, s_sound = NULL, ПАЛ = NULL, n_duration = NULL, m_lcit=1860,0, m_active_time=14625,0, e_unsat_fat = нуль, m_calories = +1422,11015205, BMR =1269.04654879, m_total_calories=2691.15670084, n_sound=null, s_asleep_time=null, e_sodium=null, s_awake=null, e_sugar=null, s_duration=null, n_awake=null, возраст = 69,8328767123, null = null = ell =28, ell_f = n_quality=null, n_awake_time=null, пол =0.0, n_asleep_time=null}], [2.0150426E7, {e_protein=null, вес =78.0, goal_body_weight_intent=null, body_fat=null, m_distance=1572.0, s_awakenings=null, null, m_lcat=265.0, goal_body_weight= ноль, s_quality = ноль, m_steps=2116.0, e_cholesterol= ноль, s_light = ноль, e_sat_fat = ноль, n_bedtime = ноль, m_workout_time=0.0, e_calcium= нуль, nlight_nul =null, e_calories=null, pal=null, n_duration=null, m_lcit=6360.0, s_awake_time=null, e_unsat_fat=null, m_calories=104.843981181, bmr=1507.45521348, m_total_calories=1612.29919466, n_sound=null, s_asleep_time=null, e_sodium=null, s_awake=null, e_sugar=null, s_duration=null, n_awake=null, возраст =69.8356164384, e_carbs=null, ell_f = null, n_awake_time= null, пол =0.0, n_asleep_time=null, m_active_time=1140.0}], [2.0150427E7, {e_protein=null, вес =78.0, goal_body_weight_intent=null, body_fat=null, m_distance=4334.0, s_ak =1.72, m_lcat=1091.0, goal_body_weight= ноль, s_quality=0.0, m_steps=5726.0, e_cholesterol= ноль, s_light=0.0, e_sat_fat= ноль, n_bedtime = ноль, m_workout_time=0.0, e_calcium=null, s=null, n_light=null, s_awake_time=17100.0, pal=null, n_duration=null, m_lcit=4320.0, m_active_time=2978.0, e_unsat_fat=null, m_calories=283.00944155, e_calories=null, bmr=1474682455 = 1774682402455 = n = 1774682405 = n = n = 0, n = n = n = n = 1774,90 = n = 0,76868 = n = n = 0,76868 = n = n = 07468 = n = n = n = 074682 = 0682 = 0682 = 868 = 064768440 s_asleep_time=-5400.0, e_sodium= ноль, s_awake=0.0, e_sugar= ноль, s_duration=22500.0, n_awake= ноль, возраст =69.8383561644, e_carbs= ноль, e_fiber=null, s_sound=0.0, n_quality=null, n_awake_time=null, пол =0.0, n_asleep_time=null}], [2.0150428E7, {e_protein=null, weight=78.0, goal_body_weight_intent=null, body_fat=null, m_daw = nullings, null, sll = ноль, высота = 1,72, m_lcat = ноль, goal_body_weight = ноль, s_quality = ноль, e_calories = ноль, e_cholesterol = ноль, s_light = ноль, e_sat_fat = ноль, n_bedtime = ноль, m_workout_time = ноль, e_calcium = нуль, sll, n_awakenings=null, n_light=null, m_steps=null, pal=null, n_duration=null, m_lcit=null, s_awake_time=null, e_unsat_fat=null, m_calories=null, bmr=1527.57418082, m_sl_t_t__t_15 = ноль, e_sodium = ноль, s_awake = ноль, e_sugar = ноль, s_duration = ноль, n_awake = ноль, возраст =69.8410958904, e_carbs= ноль, e_fiber = ноль, s_sound = нуль, n_quality= ноль, n_awake_time= нуль, n_asleep_time = ноль, m_active_time = ноль}], [2.0150429E7, {e_protein= ноль, вес = 78,0, goal_body_weight_intent = ноль, body_fat = ноль, m_distance = ноль, s_awakenings = ноль, высота = 1,72, м _lcat = ноль, goal_body_weight = ноль, s_quality = ноль, m_steps = ноль, e_cholesterol = ноль, s_light = ноль, e_sat_fat = ноль, n_bedtime = ноль, m_workout_time = ноль, e_calcium = нуль, s_bedtime = нуль, нуль_свет = нуль null, s_awake_time=null, pal=null, n_duration=null, m_lcit=null, m_active_time=null, e_unsat_fat=null, m_calories=null, e_calories=null, bmr=1527.55567397, m_total_calories=502, null_sl = 503.191690 e_sodium = ноль, s_awake = ноль, e_sugar = ноль, s_duration = ноль, пол = 0.0, возраст =69.8438356164, e_carbs= ноль, e_fiber = ноль, s_sound = ноль, n_quality= ноль, n_awake_time= ноль, n_awake=null, n_awake = null, n_awake = null null}]], links={следующий =/ толчок /api/v.1.1/users/ymQeH-UUAU8hs54Ad7Mxjw/ Trends??end_date=20150422&bucket_size=d&num_buckets=7}}}

Основная проблема в предыдущем объекте JSON состоит в том, что ключи не правильно сформированы. На самом деле это должны быть строки символов между "". Не могли бы вы дать мне некоторые указания о том, как решить эту проблему? Большое спасибо за вашу помощь. [РЕДАКТИРОВАТЬ]

Это функция обратного вызова, которую я начал изменять, чтобы получить данные из Jawbone:

private Callback genericCallbackListener = new Callback<Object>() {
@Override
public void success(Object o, Response response) {
    Log.e(LOG_TAG,  "api call successful, json output: " + o.toString());
//I added the following 3 lines of code to parse the JSON result
    JsonElement je = new JsonParser().parse(o.toString());
    JsonObject root = je.getAsJsonObject();
    JsonElement je2 = root.get("Data");
    Toast.makeText(getApplicationContext(), je2.toString(), Toast.LENGTH_LONG).show();
}

@Override
public void failure(RetrofitError retrofitError) {
    Log.e(LOG_TAG,  "api call failed, error message: " + retrofitError.getMessage());
    Toast.makeText(getApplicationContext(), retrofitError.getMessage(), Toast.LENGTH_LONG).show();
}

};

1 ответ

Решение

Хорошо, я думаю, я знаю, в чем твоя проблема. Вы используете модернизацию Callback неправильно.

Вам не нужно анализировать результат. Jawbone + retrofit сделает это за вас.

Проверьте этот пример:

public interface BookService{
    @GET("/books")
    void getBooks(Callback<List<Book>> books);
}

// AND THEN

private Callback genericCallbackListener = new Callback<List<Book>>() {

    @Override
    public void success(List<Book> books, Response response) {
        [...] // use books
    }

    @Override
    public void failure(RetrofitError retrofitError) {

    }
}

taskService.getBooks(genericCallbackListener);

Так что не пытайтесь вручную разобрать ответ. Пусть Jawbone Android SDK сделает это за вас.

Другие вопросы по тегам