java–react-native:android.view.WindowManager $BadTokenException

java–react-native:android.view.WindowManager $BadTokenException,第1张

概述我有一个错误,我不知道从哪里开始.试图更新react-native版本–但它没有做到这一点..环境react-native-cli:2.0.1react-native:0.54.2生产建设该应用程序是构建并发布到谷歌游戏商店.所以这是编译后的生产版本.认为这可能是模块的一个问题..但不太确定..这是我在主要组

我有一个错误,我不知道从哪里开始.试图更新react-native版本 – 但它没有做到这一点..

环境

react-native-cli: 2.0.1react-native: 0.54.2

生产建设

该应用程序是构建并发布到谷歌游戏商店.所以这是编译后的生产版本.认为这可能是模块的一个问题..但不太确定..

这是我在主要组件中的导入

import React, { Component } from 'react'import { VIEw, Modal, Text, Textinput, StyleSheet } from 'react-native'import { KeyboardAwareScrollVIEw } from 'react-native-keyboard-aware-scroll-vIEw'

全栈

java.lang.RuntimeException:   at com.facebook.react.brIDge.ReactContext.handleException (ReactContext.java:313)  at com.facebook.react.brIDge.GuardedRunnable.run (GuardedRunnable.java:23)  at androID.os.Handler.handleCallback (Handler.java:739)  at androID.os.Handler.dispatchMessage (Handler.java:95)  at androID.os.Looper.loop (Looper.java:158)  at androID.app.ActivityThread.main (ActivityThread.java:7225)  at java.lang.reflect.Method.invoke (Native Method)  at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)  at com.androID.internal.os.ZygoteInit.main (ZygoteInit.java:1120)Caused by: androID.vIEw.WindowManager$BadTokenException:   at androID.vIEw.VIEwRootImpl.setVIEw (VIEwRootImpl.java:849)  at androID.vIEw.WindowManagerGlobal.addVIEw (WindowManagerGlobal.java:337)  at androID.vIEw.WindowManagerImpl.addVIEw (WindowManagerImpl.java:91)  at androID.app.Dialog.show (Dialog.java:350)  at com.facebook.react.vIEws.modal.ReactModalHostVIEw.showOrUpdate (ReactModalHostVIEw.java:256)  at com.facebook.react.vIEws.modal.ReactModalHostManager.onAfterUpdateTransaction (ReactModalHostManager.java:107)  at com.facebook.react.vIEws.modal.ReactModalHostManager.onAfterUpdateTransaction (ReactModalHostManager.java:28)  at com.facebook.react.uimanager.VIEwManager.updatePropertIEs (VIEwManager.java:35)  at com.facebook.react.uimanager.NativeVIEwHIErarchyManager.createVIEw (NativeVIEwHIErarchyManager.java:233)  at com.facebook.react.uimanager.UIVIEwOperationQueue$CreateVIEwOperation.execute (UIVIEwOperationQueue.java:153)  at com.facebook.react.uimanager.UIVIEwOperationQueue.run (UIVIEwOperationQueue.java:816)  at com.facebook.react.uimanager.UIVIEwOperationQueue.flushPendingBatches (UIVIEwOperationQueue.java:929)  at com.facebook.react.uimanager.UIVIEwOperationQueue.access00 (UIVIEwOperationQueue.java:47)  at com.facebook.react.uimanager.UIVIEwOperationQueue.runGuarded (UIVIEwOperationQueue.java:887)  at com.facebook.react.brIDge.GuardedRunnable.run (GuardedRunnable.java:21)

UPDATE

我使用模态3个不同的地方.

const Credits = ({ display, toggle }) => (  <VIEw>    <touchableOpacity      style={[styles.button, styles.info]}      onPress={() => toggle()}    >      <Icon name="question" size={30} color="#000" />    </touchableOpacity>    {display && (      <Modal        animationType="slIDe"        transparent={true}        onRequestClose={() => toggle()}      >        <VIEw style={styles.card}>          <ScrollVIEw>            { ... code ...  }          </ScrollVIEw>          <touchableOpacity            style={[styles.button, styles.close]}            onPress={() => toggle()}          >            <Icon name="close" size={30} color="#000" />          </touchableOpacity>        </VIEw>      </Modal>    )}  </VIEw>)

不知道是不是因为我使用{display&& <模态... /> }逻辑而不是使用prop visible = {display} ???

任何帮助将非常感谢!

解决方法:

因为React本机工作异步;从React本机获取结果并在更新任何UI之前,检查activity.isFinishing()以及活动是否完成后不更改UI

另一个解决方案是在某些实例变量中保存onResume()和onPause()中的活动状态,然后在从React获取结果时检查活动状态,如果活动已恢复,则只显示结果,但如果您的活动暂停,则保存React的结果并显示活动的onResume()方法中的结果.
另外,不要忘记检查上面的生命周期,以显示从React到用户的任何错误.来自react的任何AndroID UI更新都应考虑AndroID活动生命周期.

voID onResume(){    super.onResume();    activityResumed = true;    if(showResultsOnResume){        showResultsOnResume = false;       //you have saved results from react waiting to show, show it here     }}voID onPause(){       super.onPause();       activityResumed = false;}// use this method to update any UI from ReactvoID onReactResult(/*Results or Errors from React*/){        if(activityResumed){           // show the result       }else{           showResultsOnResume = true;           // save result       }}
总结

以上是内存溢出为你收集整理的java – react-native:android.view.WindowManager $BadTokenException全部内容,希望文章能够帮你解决java – react-native:android.view.WindowManager $BadTokenException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1116747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存