我和另外两名学生正在与Xamarin一起制作多平台运动应用程序。 该应用程序可以在培训时收集数据,用户可以查看培训和 测量(最后一项由运动医生完成)。
我们使用API从在线数据库中获取内容。 获取当前用户的培训列表可以正常工作。 但是,在获取测量列表时,JSON数据似乎不完整。
有关测量的数据库结构,请参见下图。每个测量都有一些全局数据保存在“Metingen”中。测量结果保存在“Resultaten”表中。结果的每一行(例如权重,BMI等)在“Resultaten”表中都有自己的行。每个测量结果都有一个TypeID。这用于从“类型”表中获取测量类型的数据(例如,名称=“重量”,单位=“kg”等)。
我们目前在JSON数据中缺少的是measurementdetail的名称(例如,“Types”表中的“Weight”或“BMI”)。 我们在JSON数据中得到了正确的TypeID,但并不总是来自表中的数据(我们试图得到的3个测量中的一个测量完全完成)。相反,我们得到Type:{“$ ref:1}
提前致谢!
执行api调用的方法:
private void getMeasurementsFromDB()
{
HttpResponseMessage response = new ApiRequest()
.SetLogin(UserRepository.Instance().login)
.Get("api/meting");
if (response.StatusCode == HttpStatusCode.OK)
{
var JSON = response.Content.ReadAsStringAsync();
var jsonarray = JsonConvert.DeserializeObject(JSON.Result);
JArray measurements = JArray.FromObject(jsonarray);
foreach (JObject measurement in measurements)
{
if (!MeasurementRepository.Instance().measurementExistsLocally((int)measurement["ID"]))
{
int measurementId = (int)measurement["ID"];
DateTime date = (DateTime)measurement["Datum"];
string userId = (string)measurement["Deelnemer"]["Login"];
string conclusion = (string)measurement["Conclusie"];
int state = (int)measurement["Status"];
LocalMeasurementModel tempMeasurement = new LocalMeasurementModel(measurementId, date, userId, conclusion, state);
MeasurementRepository.Instance().saveMeasurementModel(tempMeasurement);
JArray locationInfos = (JArray)measurement["Resultaten"];
foreach (JObject result in locationInfos)
{
LocalMeasurementDetailModel localResults = new LocalMeasurementDetailModel();
localResults.measurementId = (int)measurement["ID"];
if (!String.IsNullOrEmpty((string)result["WaardeString"]))
{
localResults.value = (string)result["WaardeString"];
}
if (!String.IsNullOrEmpty((string)result["WaardeFloat"]))
{
localResults.value = (string)result["WaardeFloat"];
}
localResults.unit = (string)result["Type"]["Eenheid"];
localResults.name = (string)result["Type"]["Naam"];
MeasurementRepository.Instance().saveMeasurementDetailModel(localResults);
}
}
}
}
else if (response.StatusCode == HttpStatusCode.Forbidden)
{
}
else
{
}
MeasurementRepository.Instance().busy = false;
loadMeasurements();
}
API使用实体框架。 接收呼叫的API函数:
[IsalaAuthorize(Rechten =
"meting_eigen_ophalen, " +
"meting_alle_ophalen")]
[GET("api/meting")]
public IEnumerable<Meting> GetMetingen()
{
var principal = HttpContext.Current.User;
if (principal.IsInRole("meting_alle_ophalen"))
{
Log.Info("[Metingen] Alle metingen worden opgehaald.");
return Metingen.GetAll();
}
Log.Info("[Metingen] Alle metingen van gebruiker '" + principal.Identity.Name + " worden opgehaald.");
return Metingen.GetAllByGebruiker(principal.Identity.Name);
}
从数据库获取数据的API方法
public IEnumerable<Meting> GetAllByGebruiker(string id)
{
db.Configuration.ProxyCreationEnabled = false;
IEnumerable<Meting> metingen = db.Metingen
.Include("Deelnemer")
.Include(c => c.Resultaten)
.Include("Resultaten.Type")
.Where(m => m.Deelnemer.Login.Contains(id))
.OrderByDescending(x => x.Datum);
foreach (Meting meting in metingen)
{
meting.Resultaten = meting.Resultaten
.Where(r => r.Revisie == meting.Resultaten.Where(rm => rm.TypeID == r.TypeID)
.Max(rm => rm.Revisie))
.ToList();
}
return metingen;
}