我正在开发 .jar api 以从 Unity3D 读取 Google Fit 数据。我现在面临的问题是,当我想执行这段代码时:
private void buildFitnessClient() {
mClient = new GoogleApiClient.Builder(myContext).addApi(Fitness.HISTORY_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addConnectionCallbacks(new ConnectionCallbacksListener())
.enableAutoManage(this, 0, new ConnectionFailedListener()).build();
}
我收到错误:
java.lang.IllegalStateException:必须从进程的主线程调用
该错误是由于this代码行最后一句中的引用。
现在在网上我发现我可以通过在主循环器上启动处理程序来解决这个问题,我用以下代码尝试了这一点:
new Handler(Looper.getMainLooper()).post(
new Runnable() {
@Override
public void run() {
try {
buildFitnessClient();
} catch (Exception ex) {
Log.i(TAG, ex.getMessage() + "\n");
}
}
});
由于某种原因,我的 Unity 应用程序立即崩溃,通常我会收到错误,因为我使用了 try catch 语句。遇到这个问题,它立即崩溃,并且没有我可以检查的日志。
当我创建没有 mainlooper 的处理程序时,例如:
new Handler()
or
new Handler(Looper.myLooper())
代码运行,但 java.lang.IllegalStateException 错误仍然存在,并且 Thread.currentThread() 显然保持不变。
程序运行的线程是Unity创建的线程。
提前致谢!