1

UP Band データを分析する Android アプリを開発しています。UP SDK for Android にある例を使用すると、現時点では傾向データを JSON オブジェクトとして取得できます。問題は、この JSON オブジェクトの形式が正しくないことです。実際、トレンドデータを次の方法で逆シリアル化しようとすると:

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

次のエラーが表示されます。

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: 行の期待値...

さらに、API 呼び出しの結果を調べると、次のようになります。

{meta={user_xid= MASKED, message=OK, code=200.0, time=1.430319261E9}, data={earliest=2.0130408E7, data=[[2.0150423E7, {e_protein=null, weight=78.0, goal_body_weight_intent=null, body_fat=null, m_distance=8073.0 , s_awakenings=null, height=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, n_bedtime=null, m_workout_time=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_calories=532.710151311、e_calories=null、bmr=1426.58256649、m=8total1949。 , n_sound=null, e_sugar=null, e_sodium=null, s_awake=null, s_asleep_time=null, s_duration=null, n_awake=null, age=69.8273972603, e_carbs=null, e_fiber=null, s_sound=null, n_quality=null, n_awake_time =ヌル、性別=0.0、n_asleep_time=null}]、[2.0150424E7、{e_protein=null、体重=78.0、goal_body_weight_intent=null、body_fat=null、m_distance=9641.0、s_awakenings=null、height=1.72、m_lcat=1145.0、goal_body_weight=null、s_quality=null , m_steps=12657.0, e_cholesterol=null, s_light=null, e_sat_fat=null, n_bedtime=null, m_workout_time=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=11460.0, m_active_time=6508.0, e_unsat_fat=null, m_calories=632.988689047, e_calories=null, bmr=1412.57952142, m_total_calories=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、s_sound = null、n_quality = null、n_awake_time = null、gender = 0.0、n_sleep_time = null}]、[2.0150425E7、{e_protein = null、重量 = 78。0、goal_body_weight_intent=null、body_fat=null、m_distance=21643.0、s_awakenings=null、height=1.72、m_lcat=2455.0、goal_body_weight=null、s_quality=null、e_calories=null、e_cholesterol=null、s_light=null、e_sat_fat=null、 n_bedtime=null、m_workout_time=0.0、e_calcium=null、s_bedtime=null、n_awakenings=null、n_light=null、s_awake_time=null、s_sound=null、pal=null、n_duration=null、m_lcit=1860.0、m_active_time=14625.0、e_unsat_fat= null, 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, n_awake=null, 7 ecarb3s3=86. e_fiber=null、m_steps=28322.0、n_quality=null、n_awake_time=null、gender=0.0、n_asleep_time=null}]、[2.0150426E7、{e_protein=null、weight=78.0、goal_body_weight_intent=null、body_fat=null、m_distance=1572.0、s_awakenings=null、height=1.72、m_lcat=265.0、goal_body_weight=null、s_quality=null、m_steps=2116.0、e_cholesterol=null、s_light=null、e_sat_fat=null、n_bedtime=null、m_workout_time=0.0、e_calcium= null, s_bedtime=null, n_awakenings=null, n_light=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=1919.6,2_total 2 n_sound=null、s_asleep_time=null、e_sodium=null、s_awake=null、e_sugar=null、s_duration=null、n_awake=null、age=69.8356164384、e_carbs=null、e_fiber=null、s_sound=null、n_quality=null、n_awake_time= null、gender=0.0、n_asleep_time=null、m_active_time=1140.0}]、[2.0150427E7、{e_protein=null、weight=78.0、goal_body_weight_intent=null、body_fat=null、m_distance=4334.0、s_awakenings=0.0、height=1.72、m_lcat =1091.0、goal_body_weight=null, s_quality=0.0, m_steps=5726.0, e_cholesterol=null, s_light=0.0, e_sat_fat=null, n_bedtime=null, m_workout_time=0.0, e_calcium=null, s_bedtime=-5400.0, n_awakenings=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=1474.94024527, m_total_calories=1757.94968682, n_sound=null, s_asleep_time=-5400.0, e_sodium= null、s_awake=0.0、e_sugar=null、s_duration=22500.0、n_awake=null、age=69.8383561644、e_carbs=null、e_fiber=null、s_sound=0.0、n_quality=null、n_awake_time=null、gender=0.0、n_sleep_time=null} ], [2.0150428E7, {e_タンパク質=null, 体重=78.0, 目標体重の意図=null, 体脂肪=null, m_距離=null, s_覚醒=null, 身長=1.72, m_lcat=null, 目標体重=null, s_quality=null, e_calories=null 、e_cholesterol=null、s_light=null、e_sat_fat=null、n_bedtime=null、m_workout_time=null、e_calcium=null、s_bedtime=null、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_total_calories=1527.57418082, n_sound=null, s_asleep_time=null, e_sodium=null, s_awake=null, e_sugar=null, s_duration=null, s_duration=null, age=69.8410958904、e_carbs=null、e_fiber=null、s_sound=null、n_quality=null、n_awake_time=null、gender=0.0、n_asleep_time=null、m_active_time=null}]、[2.0150429E7、{e_protein=null、weight=78.0 、goal_body_weight_intent=null、body_fat=null、m_distance=null、s_awakenings=null、height=1.72、m_lcat=null、goal_body_weight=null、s_quality=null、m_steps=null、e_cholesterol=null、s_light=null、e_sat_fat=null、n_bedtime =ヌル、m_workout_time=ヌル、e_calcium=null、s_bedtime=null、n_awakenings=null、n_light=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=503.191690242、n_sound=null、s_asleep_time=null、e_sodium=null、s_awake=null、e_sugar=null、s_duration=null、gender=0.0、age=69.8438356164、e_carbs=null、e_fiber=null n_quality=null, n_awake_time=null, n_awake=null, n_asleep_time=null}]], links={next=/nudge/api/v.1.1/users/ymQeH-UUAU8hs54Ad7Mxjw/trends/?end_date=20150422&bucket_size=d&num_buckets=7} }}n_sound=null、s_asleep_time=null、e_sodium=null、s_awake=null、e_sugar=null、s_duration=null、gender=0.0、age=69.8438356164、e_carbs=null、e_fiber=null、s_sound=null、n_quality=null、n_awake_time= null, n_awake=null, n_asleep_time=null}]], links={next=/nudge/api/v.1.1/users/ymQeH-UUAU8hs54Ad7Mxjw/trends/?end_date=20150422&bucket_size=d&num_buckets=7}}}n_sound=null、s_asleep_time=null、e_sodium=null、s_awake=null、e_sugar=null、s_duration=null、gender=0.0、age=69.8438356164、e_carbs=null、e_fiber=null、s_sound=null、n_quality=null、n_awake_time= null, n_awake=null, n_asleep_time=null}]], links={next=/nudge/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();
}

};

4

1 に答える 1

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にお任せください。

于 2015-05-04T10:48:35.173 に答える