【发布时间】:2014-12-15 09:23:03
【问题描述】:
我正在制作一个可穿戴的应用程序,它只需向手机发送消息以显示 Toast,现在一切正常,但我有一个问题,它只在用户与可穿戴设备交互并且我想要时发送消息我的应用会自动发送消息。
问题是,如果我在 onCreate 方法中调用方法 sendToast(),则方法 sendToast() 中的布尔变量 nodeId 为空,但如果我在创建所有内容后单击按钮,它会完美运行。
我怀疑如果我直接调用 sendToast 线程还没有完成,并且在那一刻我没有节点,但我不知道如何解决它。
我也尝试了一些类似的技巧,但到目前为止都失败了:
在方法 setupWidgets() 中调用方法 sendToast()。
模拟单击创建按钮的实例并使用方法 .callOnClick() 或 performClick() 但由于我使用 WatchViewStub(与圆形和方形可穿戴设备一起使用)我无法访问它,它给出我的 NullPointerException
在调用方法之前调用一个定时器来延迟执行。
到目前为止没有任何效果,有人可以帮助我吗?
非常感谢!!
这是我的代码:
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
initApi();
final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
setupWidgets();
}
});
}
private void initApi() {
client = getGoogleApiClient(this);
retrieveDeviceNode();
}
private void setupWidgets() {
clickButton = (Button) findViewById(R.id.btn_toast);
clickButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sendToast();
}
});
}
private GoogleApiClient getGoogleApiClient(Context context) {
return new GoogleApiClient.Builder(context)
.addApi(Wearable.API)
.build();
}
private void retrieveDeviceNode() {
new Thread(new Runnable() {
@Override
public void run() {
client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
NodeApi.GetConnectedNodesResult result =
Wearable.NodeApi.getConnectedNodes(client).await();
List<Node> nodes = result.getNodes();
if (nodes.size() > 0) {
nodeId = nodes.get(0).getId();
}
client.disconnect();
}
}).start();
}
private void sendToast() {
if (nodeId != null) {
new Thread(new Runnable() {
@Override
public void run() {
client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
Wearable.MessageApi.sendMessage(client, nodeId, GET_CONTACTS, null);
client.disconnect();
}
}).start();
}
}
}
【问题讨论】:
标签: java android multithreading wear-os