Java Can';t在主线程上启动处理程序
我正在开发一个.jar api来从Unity3D读取Google Fit数据。我现在面临的问题是,当我想要执行这段代码时:Java Can';t在主线程上启动处理程序,java,android,multithreading,android-studio,unity3d,Java,Android,Multithreading,Android Studio,Unity3d,我正在开发一个.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)
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:必须从进程的主线程调用
此错误是由于代码行最后一句中的引用引起的
现在在线上,我发现我可以通过在主活套上启动一个处理程序来解决这个问题,我尝试了以下代码:
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()
或
代码运行,但java.lang.IllegalStateException错误仍然存在,Thread.currentThread()显然保持不变
程序运行的线程是Unity创建的线程
提前谢谢 这看起来和我遇到的问题一样,但它并没有为我解决任何问题:似乎线程启动程序可以工作,它在构建健身客户端的方法上崩溃?程序在enableAutoManage中的“This”上崩溃(This,0,…)。。。。
new Handler(Looper.myLooper())