Google Fitを使用して1ヶ月間のカロリーを消費して情報を表示していますが、非常に長い時間がかかります(約45秒)。私がやっていることは、その期間にわたってユーザーによって行われたすべての活動を検索し、各活動の期間中に消費されたカロリーの別の読み取り要求を作成することです。私はこれを行うにはかなり悪い方法だと知っていますが、私は他の方法を考えることはできません。Google Fitで特定のアクティビティで消費されたカロリーを見つけようとしています
@Override
protected ArrayList<DayActivities> doInBackground(Void... params)
{
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
cal.set(Calendar.DAY_OF_MONTH, 30);
cal.add(Calendar.MONTH, -1);
int currTime;
ArrayList<CalorieActivity> activityList = new ArrayList<>();
long endTime = cal.getTimeInMillis();
SetCalendar.setLessOneMonth(cal);
long startTime = cal.getTimeInMillis();
DataReadRequest readRequest = ReadRequestFactory.getActivityReadRequest(startTime, endTime);
DataReadResult dataReadResult = Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);
if (dataReadResult.getBuckets().size() > 0)
{
Log.i("MyApp", "Number of returned buckets of DataSets is: "
+ dataReadResult.getBuckets().size());
for (Bucket bucket : dataReadResult.getBuckets())
{
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet : dataSets)
{
Calendar startDate;
Calendar endDate;
DayActivities currActivity;
Date date;
for (DataPoint dp : dataSet.getDataPoints())
{
startDate = Calendar.getInstance();
endDate = Calendar.getInstance();
currActivity = new DayActivities();
CalorieActivity calorieActivity = new CalorieActivity();
startDate.setTime(new Date(dp.getStartTime(TimeUnit.MILLISECONDS)));
currActivity.setStartDate(startDate);
calorieActivity.setStartDate(startDate);
currTime = startDate.get(Calendar.DAY_OF_MONTH);
endDate.setTime(new Date(dp.getEndTime(TimeUnit.MILLISECONDS)));
currActivity.setEndDate(endDate);
calorieActivity.setEndDate(endDate);
for (Field field : dp.getDataType().getFields())
{
if (field.getName().equals("activity"))
{
calorieActivity.setActivity(ActivityTypes.findActivity(Integer.parseInt(dp.getValue(field).toString())));
calorieActivity.setActivityNumber(Integer.parseInt(dp.getValue(field).toString()));
}
}
cal.setTime(calorieActivity.getStartDate().getTime());
startTime = cal.getTimeInMillis();
cal.setTime(calorieActivity.getEndDate().getTime());
endTime = cal.getTimeInMillis();
DataReadRequest readRequest2 = ReadRequestFactory.getCaloriesReadRequest(startTime, endTime);
DataReadResult dataReadResult2 = Fitness.HistoryApi.readData(mClient, readRequest2).await(1, TimeUnit.MINUTES);
for (Bucket bucket2 : dataReadResult2.getBuckets())
{
List<DataSet> dataSets2 = bucket2.getDataSets();
for (DataSet dataSet2 : dataSets2)
{
for (DataPoint dp2 : dataSet2.getDataPoints())
{
for (Field field2 : dp2.getDataType().getFields())
{
if (field2.getName().equals("calories"))
{
calorieActivity.setCalorie((int) Double.parseDouble(dp2.getValue(field2).toString()));
}
}
}
}
}
boolean added = false;
for(int j=0; j<dayActivities.size(); j++)
{
DayActivities currDay = dayActivities.get(j);
if(currActivity.getStartDate().get(Calendar.DAY_OF_MONTH) == currDay.getStartDate().get(Calendar.DAY_OF_MONTH))
{
currDay.addActivity(calorieActivity);
added = true;
}
}
if(!added)
{
DayActivities newDay = new DayActivities();
Calendar start = Calendar.getInstance();
start.setTime(currActivity.getStartDate().getTime());
Calendar end = Calendar.getInstance();
end.setTime(currActivity.getEndDate().getTime());
SetCalendar.setStartTime(start);
SetCalendar.setEndTime(end);
newDay.setStartDate(start);
newDay.setEndDate(end);
newDay.addActivity(calorieActivity);
dayActivities.add(newDay);
}
}
}
}
}
else
{
Log.i("MyApp", "No data");
}
Log.i("MyApp", "We're done here");
return dayActivities;
}
あなたは、ループのための不合理な数があります見ることができるように、これは(私はループのための3つを取るすべての活動を、見つける必要があるので、私はそれぞれの活動のために消費カロリーを見つける必要があるこれは各アクティビティに対して)ループ用にさらに3つが必要です。ばかばかしいですが、私はこれを行う他の方法を見つけることができません。
[Google Fit API、アクティビティごとにカロリーを消費する](http://stackoverflow.com/questions/37820404/google-fit-api-getting-calories-burned-per-activity) )と[Google fit apiを使用した消費カロリー](http://stackoverflow.com/questions/32123898/calories-expenditure-using-google-fit-api)を参照してください。これがうまくいくことを願っています –
2つは実際に私のものです。私はこのプロジェクトに取り組み始めて以来、良い答えを得ることができませんでした。とにかく試していただきありがとうございます:( – user292277