我正在使用.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 引用引起的。
现在在线我发现我可以通过在Main Looper上启动Handler来解决这个问题,我尝试使用此代码:
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的情况下创建Handler时,例如:
new Handler()
或
new Handler(Looper.myLooper())
代码运行,但java.lang.IllegalStateException错误仍然存在,而Thread.currentThread()显然保持不变。
程序运行的线程是Unity创建的线程。
提前致谢!