我在手持式应用程序中发现了数据,我调用了数据更改:
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
Log.d(TAG, "Data changed: " + dataEvents);
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_DELETED) {
Log.d(TAG, "DataItem deleted: " + event.getDataItem().getUri());
} else if (event.getType() == DataEvent.TYPE_CHANGED) {
Log.d(TAG, "DataItem changed: " + event.getDataItem().getUri());
if (event.getDataItem().getUri().getPath().endsWith(Data.PATH_SPEED)) {
DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());
// This is where I get the data for speedReport from the DataMap
String speedReport = dataMapItem.getDataMap().getString(Data.SPEED_REPORT);
}
}
}
};
我试图让speedReport以这种格式转移到onDraw:
@Override
public void onDraw(Canvas canvas, Rect bounds) {
canvas.drawRect(0, 0, bounds.width(), bounds.height(), mBackgroundPaint);
float x = mXOffset;
// This is where I want to pass the variable for speedReport from the DataMap
if (speedReport != null) {
canvas.drawText(speedReport, x - 80, (mYOffset + 14), mAmPmPaint);
} else {
canvas.drawText("Loading Data", x - 80, (mYOffset + 14), mAmPmPaint);
}
}
当我使用活动进行此操作时(例如,对于常规磨损应用,而不是表面),我只使用了setText并将其应用到相应的textview。但事实证明这比这更复杂。它不是完全接受变量。我需要通过某种机制传递它。也许是处理程序或其他什么?
将数据从DataMap传输到onDraw的最佳方法是什么?你能提供一个例子作为指南吗?
更新 正如我在下面提到的,我尝试将speedReport设置为null,但是每次执行此操作时,speedReport基本上都会为null,即使有数据进入DataMap对象也是如此。
我注意到如果我将相同的speedReport变量设置为“null”到“33”,它会将“33”拉到onDraw。因此,定义局部变量是有效的,它只是没有从数据对象中获取该值。
我添加了一个日志: Log.d(TAG,“DataItem String:”+ speedReport);
后面的行:String speedReport = dataMapItem.getDataMap()。getString(Data.SPEED_REPORT);
日志报告我从手持设备预期的任何变量,表明数据正在传递到可穿戴应用程序并存储在数据对象中。但是数据并没有超出onDataChanged。
本着帮助其他人解决这个问题的精神,我确实有一个可以分享的临时解决方案。我将数据保存到共享首选项,然后从onDraw中退出共享首选项。这在技术上有效,但我的问题仍然存在,将数据从DataMap传输到onDraw的最佳方法是什么?你能提供一个例子作为指导吗?
答案 0 :(得分:0)
您似乎正在使用CanvasWatchFace
,所以您应该做的是:
speedReport
字段并将其设置为null
onDataChanged
收到DataMap
回调时,请设置speedReport
并致电invalidate()
onDraw' check if
speedReport is
null ; if yes, use
"正在加载数据"字符串,否则使用speedReport value
。在TextView
之前有一个字段,其中包含speedReport
的值或您的默认文本。现在你需要创建自己的字段来保存它。