【问题标题】:Fitbit get distance data in miles not kilometersFitbit 以英里而不是公里为单位获取距离数据
【发布时间】:2015-02-26 18:28:08
【问题描述】:

我有一个从 Fitbit 获取数据的示例项目,但信息采用公制而不是英制。这是使用 TimeSeriesDataList 类提取日期和字符串对列表的代码,但以公里而不是英里为单位。如何修改此代码以获取英里而不是公里的数据?非常感谢任何帮助。

public class TimeSeriesDataList
{
    public List<Data> DataList { get; set; }

    public class Data
    {
        public DateTime DateTime { get; set; }
        public string Value { get; set; }
    }
}

public class FitbitClient : IFitbitClient
{
    /// <summary>
    /// Get TimeSeries data for another user accessible with this user's credentials
    /// </summary>
    /// <param name="timeSeriesResourceType"></param>
    /// <param name="startDate"></param>
    /// <param name="endDate"></param>
    /// <param name="userId"></param>
    /// <returns></returns>
    private TimeSeriesDataList GetTimeSeries(TimeSeriesResourceType timeSeriesResourceType, DateTime baseDate, string endDateOrPeriod, string userId)
    {
        string userSignifier = "-"; //used for current user
        if (!string.IsNullOrWhiteSpace(userId))
            userSignifier = userId;

        // Here is where I believe I need to make a change, somehow, so that
        // data that comes in when this is string is requested, comes in metric units

        string requestUrl = string.Format("/1/user/{0}{1}/date/{2}/{3}.xml", userSignifier, StringEnum.GetStringValue(timeSeriesResourceType), baseDate.ToString("yyyy-MM-dd"), endDateOrPeriod);

        RestRequest request = new RestRequest(requestUrl);

        request.OnBeforeDeserialization = resp => {
            XDocument doc = XDocument.Parse(resp.Content);
            //IEnumerable<XElement> links = doc.Descendants("result");
            var rootElement = doc.Descendants("result").FirstOrDefault().Descendants().FirstOrDefault();

            if (rootElement != null && !string.IsNullOrWhiteSpace(rootElement.Name.LocalName))
                request.RootElement = rootElement.Name.LocalName;
        };

        var response = restClient.Execute<TimeSeriesDataList>(request);

        HandleResponse(response);
        return response.Data;
    }
}

编辑我希望通过在标题中添加一些类似于“Accept-Language”的内容来获取已经转换的数据,但我不知道如何利用这个概念。我想到了使用转换,但此时我想看看是否有一种更简单的方法,即添加一个简单的标题,而不是为每个场景、保存数据的类、每个不同的区域等创建一个转换类。

【问题讨论】:

  • 英里是 1.60934 公里。这有帮助吗?
  • 我试图避免转换并获取已经转换的数据,因为会有很多不同的数据片段。例如,有整个英国系统使用石头和磅,当然还有距离,等等。通过某种方式将“Accept-Language”添加到标题中。

标签: c# asp.net fitbit


【解决方案1】:

我进行了快速搜索,并假设 RestRequest 是来自 RestSharp 库的类。如果是这样,根据他们的网站 (http://restsharp.org),您会执行以下操作:

request.AddHeader("Accept-Language", "...");

不确定正确的值应该是多少,您需要从FitBit's API documentation 中找出答案。

【讨论】:

  • 非常感谢!正是我需要的。添加 request.AddHeader("Accept-Language", "en_US");成功了。投票并检查!
  • 很高兴能提供帮助,但老实说,我在谷歌上搜索了大约 10 秒才找到答案。我想我搜索了“restrequest add header”,第一个结果是我链接到的文档页面。
  • 讽刺的是,我花了足足半个小时。也许我只是放错了东西,严格关注 API 示例,而不是攻击手头的基本问题。哎呀! :)
【解决方案2】:

无论此代码提供什么值,您只需将其除以 1.60934 即可得到相同的距离(以英里为单位)。希望对您有所帮助。

【讨论】:

  • 哦,我知道我可以转换它,我的目标是让它已经转换。我听说有一种方法可以添加“Accept-Language”标题,但我不知道该怎么做。
【解决方案3】:
double kilometers2 = 321.9;
double miles2 = ConvertDistance.ConvertKilometersToMiles

【讨论】:

  • 我正在尝试通过某种方式获取已经转换的数据,例如添加“Accept-Language”标头。
猜你喜欢
  • 2014-11-26
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多