gpt4 book ai didi

android - 从 AsyncTask 调用时 startReactApplication 失败 - Android 中的 React Native

转载 作者:太空狗 更新时间:2023-10-29 14:00:45 24 4
gpt4 key购买 nike

从神秘错误开始:java.lang.AssertionError: Attached DialogModule to host with pending alert but no FragmentManager (not attached to an Activity).

我在 MainActivity 中有这个:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

myManager = new MyManager(this);
myManager.start();
}

public void onManagerReady() {
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setJSBundleFile("assets://index.js")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();

mReactRootView.startReactApplication(mReactInstanceManager, "MyReactCode");
setContentView(mReactRootView);
}
...

onCreate 调用 onManagerReady 按预期工作。但是当我在管理器中使用 AsyncTask 时,它失败了:

public interface ManagerHandler { void onJobReady(); }

...

public class Manager implements ManagerHandler {
public MyManager(Context context) {
this.context = context;
}
public void start() {
new AsyncJob(context, this).execute("");
}

@Override
public void onJobReady() {
((MainActivity)context).onManagerReady();
}

private class AsyncJob extends AsyncTask<String, Void, String> {
private final Context context;
private final ManagerHandler handler;

public AsyncJob(Context context, ManagerHandler handler) {
this.context = context;
this.handler = handler;
}

@Override
protected void onPostExecute(String result) {
handler.onJobReady();
}
...
}

我省略了一些 AsyncTask 样板 - 让我向您保证 AsyncTask 正在工作并且 onManagerReady() 在适当的时间被调用。我也试过弄乱线程并“在 ui 线程上运行”,但没有成功。有趣的是,即使使用 Thread.sleep() 也会让 React 变得困惑,即使没有 AsyncTask 或从/到其他文件的调用也是如此。

最佳答案

可能为时已晚,无法为您提供帮助,但也许其他人会发现此答案有用。

基本上,您的 MainActivityReactActivity 的子类。您需要将其替换为您自己的类似于 ReactActivity 的类(只需复制粘贴)。将方法 onCreate(Bundle savedInstanceState) 的名称更改为其他名称,并在您的应用程序的其余部分准备好进行 react 时调用此方法。您还需要更改 onResume(),以便仅在加载 react 时更改状态:

  @Override
protected void onResume() {
super.onResume();
if (mReactInstanceManager != null) {
mLifecycleState = LifecycleState.RESUMED;
mReactInstanceManager.onResume(this, this);
}
}

在初始化 React 的方法末尾调用 onResume。

关于android - 从 AsyncTask 调用时 startReactApplication 失败 - Android 中的 React Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com