无法在React Native中的后台线程上调用observeForever



我们正在尝试使用.aar文件在react native中集成原生android框架。导致集成的所有步骤都很好,即.aar文件成功地集成到项目中,并且方法在整个项目中都是可见的。我们已完成以下步骤:https://reactnative.dev/docs/native-modules-android

然而,当我们试图运行一些作为.aar框架一部分的方法时,我们遇到了一个错误-

Error: Exception in HostFunction: java.lang.IllegalStateException: Cannot invoke observeForever on a background thread

代码实现看起来像这样-

package com.frameworksample;
import static com.facebook.react.bridge.UiThreadUtil.runOnUiThread;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import androidx.annotation.NonNull;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.companyName.sdk.Environment;
import com.companyName.sdk.FrameworkKit;
public class CompanyModule extends ReactContextBaseJavaModule {

CompanyModule(ReactApplicationContext context) {
super(context);
}
@NonNull
@Override
public String getName() {
return "CompanyModule";
}
@ReactMethod
public void logMessage(String name, String message) {
Log.d("Company Module", "Logged a message with the name " + name
+ " and message: " + message);
}
public Runnable initializeSDK(String paramOne, String paramTwo) {
TokenProvider tokenProvider = new TokenProvider();
FrameworkKit.initialise(
this.getReactApplicationContext(),
paramOne,
paramTwo,
tokenProvider,
response -> {
listProfiles();
Log.d("Framework Kit Object", "Object initialized successfully" + response);
return null;
}
);
return null;
}
public Runnable listProfiles() {
Log.d("List profile thread", "" + Thread.currentThread());
FrameworkKit.getInstance().listProfiles("employee@comanpany.com", response -> {
Log.d("List Profiles", "Response - " + response);
return null;
});
return null;
}
@ReactMethod(isBlockingSynchronousMethod = true)
public void initCompanyKit(String paramOne, String paramTwo){
Log.d("init method thread", "" + Thread.currentThread());
runOnUiThread(initializeSDK(paramOne, paramTwo));
}
}

即使函数listProfiles在主线程上运行,也会抛出错误

无法在后台线程上调用observeForever

这种行为的原因是什么?我们如何纠正这种情况。

您为Runnables返回null,这可能是原因。您可以尝试返回Runnable并覆盖它的run方法

private Runnable initializeSDK(String name) {
return new Runnable() {
@Override
public void run() {
// Your code
}
};
}

最新更新