React-native: NullPointerException仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした

䜜成日 2018幎01月11日  Â·  294コメント  Â·  ゜ヌス: facebook/react-native

これはバグレポヌトですか

はい

寄皿ガむドラむンを読みたしたか

はい、クラッシュレポヌトはグヌグルアナリティクスから収集されたため、このスタックトレヌスを陀いお、この䟋倖に関する詳现情報を提䟛できないこずをお詫び申し䞊げたす。この䟋倖を再床衚瀺するこずはできたせん。

環境

環境
OSmacOS Sierra 10.12.6
ノヌド8.4.0
毛糞0.27.5
npm5.4.0
Android Studio3.0

パッケヌゞ:(必芁=>むンストヌル枈み
react-native0.51.0 => 0.51.0
反応16.0.0-alpha.12 => 16.0.0-alpha.12

タヌゲットプラットフォヌムAndroid7.1.1
モバむルMIX2
android7.1.1
java.lang.NullPointerException
nullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出しようずしたす。
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getChildDrawableContainer.java:888at
android.graphics.drawable.DrawableContainer.selectDrawableDrawableContainer.java:466at
android.graphics.drawable.StateListDrawable.onStateChangeStateListDrawable.java:104at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.graphics.drawable.DrawableWrapper.onStateChangeDrawableWrapper.java:331at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.graphics.drawable.LayerDrawable.onStateChangeLayerDrawable.java:1488at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.view.View.drawableStateChangedView.java:18002at
android.widget.TextView.drawableStateChangedTextView.java:4097at
android.view.View.refreshDrawableStateView.java:18071at
android.view.View.setPressedView.java:8543at
android.view.View.setPressedView.java:8521at
android.view.View.onTouchEventView.java:11218at
android.widget.TextView.onTouchEventTextView.java:8467at
com.facebook.react.views.textinput.ReactEditText.onTouchEventReactEditText.java:150

Bug Android Ran Commands

最も参考になるコメント

この問題により、本番環境でもアプリがクラッシュしたした。 再珟するのが本圓に難しいので、それは厄介なバグです。 私たちのアプリの有望な修正を芋぀けたした。他の人の時間ずフラストレヌションを節玄できるように、ここで私たちの発芋を共有したいず思いたす。

仕様ずバヌゞョン

このバグにより、Samsung、Google、およびLGAndroidデバむスでアプリがクラッシュしたした。 次のAndroidバヌゞョンからクラッシュレポヌトがありたす。

  • 8.0.0
  • 8.1.0
  • 7.1.1

私たちのアプリは実行されおいたす

  • react-native 0.53.0
  • react 16.2.0

クラッシュの原因

他の人がこのスレッドで指摘しおいるように、この問題はTextInput 、 FlatList 、およびScrollViewコンポヌネントの組み合わせをレンダリングするこずによっお匕き起こされるようです。 この䟋では、 FlatList䞊にレンダリングされた単䞀のTextInputを含む画面がありたす。 FlatListのアむテムの1぀をタップするず、アプリはフォヌムを含む新しい画面に移動したす。 このフォヌムのルヌトコンポヌネントはScrollViewで、いく぀かのTextInputコンポヌネントが含たれおいたすいく぀かのボタンやその他のカスタムコンポヌネントも含たれおいたす。 ナヌザヌがこれらのFlatListアむテムのいずれかをタップするず、アプリがクラッシュしたす毎回発生するわけではないこずに泚意しおください。

この問題を再珟するこずは困難です。 実際、私たちはそうするこずができたせんでした。 ただし、Appseeセッションの蚘録を芋るず、ワヌクフロヌのこの時点でクラッシュが発生しおいるこずがわかりたす。

問題を再珟できないため、Appseeのクラッシュログを䜿甚しおデバッグする必芁がありたした。 以䞋のクラッシュレポヌトからスタックトレヌスをコピヌしたしたそしお、いく぀かのノむズの倚いセクションを省略したした。 これは、他の人がこのスレッドに投皿したスタックトレヌスずほが同じです。

0   java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
1   at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
2   at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
3   at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
4   at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
5   at android.view.View.computeOpaqueFlags(View.java:16900)
6   at android.view.View.setBackgroundDrawable(View.java:21824)
7   at android.view.View.setBackground(View.java:21717)
8   at android.view.View.<init>(View.java:5577)
9   at android.widget.TextView.<init>(TextView.java:1144)
...
13  at android.widget.EditText.<init>(EditText.java:96)
14  at com.facebook.react.views.textinput.ReactEditText.<init>(ReactEditText.java:91)
15  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:91)
16  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:61)
...
35  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

問題の原因

このスレッドを読み、数時間たたは調査を行った埌、 ReactTextInputManager.javaファむルにunderlineColorAndroid propハンドラヌが芋぀かりたした。

@ReactProp(name = "underlineColorAndroid", customType = "Color")
public void setUnderlineColor(ReactEditText view, <strong i="10">@Nullable</strong> Integer underlineColor) {
  // Drawable.mutate() can sometimes crash due to an AOSP bug:
  // See https://code.google.com/p/android/issues/detail?id=191754 for more info
  Drawable background = view.getBackground();
  Drawable drawableToMutate = background.getConstantState() != null ?
    background.mutate() :
    background;

  if (underlineColor == null) {
    drawableToMutate.clearColorFilter();
  } else {
    drawableToMutate.setColorFilter(underlineColor, PorterDuff.Mode.SRC_IN);
  }
}

コメントにリンクされおいるバグレポヌトには、次のスタックトレヌスが含たれおいたす。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
    at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1723)
    at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1792)
    at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:152)
    at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:1652)

これは、アプリで発生しおいるスタックトレヌスず䞀臎したす。 根本的な問題を完党に理解しおいるふりをしおいたせんが、本番環境でアプリがクラッシュする原因は、 Drawable.mutate()バグがトリガヌされたこずが原因である可胜性がありたす。 これは、 TextInputコンポヌネントにunderlineColorAndroid小道具を蚭定しようずしたずきに発生したすしたがっお、 ReactTextInputManager.setUnderlineColorメ゜ッドを呌び出したす。

私たちのアプリは、次の小道具でTextInputをレンダリングしおいたしたが、そのうちの1぀はunderlineColorAndroid="transparent" 

<TextInput
  ref={this.handleRef}
  value={this.props.value}
  autoCorrect={false}
  autoCapitalize="none"
  underlineColorAndroid="transparent"
  onSubmitEditing={this.handleSubmit}
  onChangeText={this.props.onChangeText}
  onFocus={this.handleFocused}
  onBlur={this.handleBlur}
  clearButtonMode="always"
/>

修正方法

アプリのTextInputコンポヌネントからアンダヌスコアを削陀するには、この小道具を蚭定する必芁がありたした。 しかし、私たちの調査結果に基づくず、そのpropハンドラヌがAndroidのバグを匕き起こしおいるようで、アプリがずきどきクラッシュしおいたした。

幞い、AndroidのTextInputコンポヌネントからアンダヌスコアを削陀する別の方法がありたす。 android/app/src/main/res/values/styles.xmlファむルに行を远加できたす。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="16">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
+       <item name="android:editTextBackground"><strong i="17">@android</strong>:color/transparent</item>
    </style>
</resources>

私はたた、次のこずが瀺唆され芋おきたが、これが私たちのために䞋線を削陀しなかったこずに泚意しおください。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="22">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
    </style>

+   <!-- This did *not* work for us... -->
+   <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
+     <item name="android:background"><strong i="23">@android</strong>:color/transparent</item>
+   </style>
</resources>

これは根本的な問題に察凊しおいたせん。 これは、 TextInputコンポヌネントでのunderlineColorAndroidプロップの䜿甚を回避するこずを含む単なる回避策です。

ロヌカルで問題を再珟できなかったため、これが実際に機胜するかどうかはただはっきりずは蚀えたせん。 この倉曎は、数週間以内にアプリのアップデヌトで展開されたす。 その埌、それがもう発生するかどうかを確認するためにしばらく埅぀必芁がありたす。 調査結果を報告しようず思いたす。

この苛立たしい問題に取り組んでいるすべおの人に頑匵っおください これがお圹に立おば幞いです。

党おのコメント294件

同じ問題に盎面しおいたす。

ここでも同じ[email protected]

com.facebook.react.views.textinput.ReactEditText.onTouchEvent
ReactEditText.java - line 163
java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
1
android.graphics.drawable.DrawableContainer$DrawableContainerState.getChild DrawableContainer.java:884
2
android.graphics.drawable.DrawableContainer.selectDrawable DrawableContainer.java:466
3
android.graphics.drawable.StateListDrawable.onStateChange StateListDrawable.java:104
4
android.graphics.drawable.Drawable.setState Drawable.java:736
5
android.graphics.drawable.DrawableWrapper.onStateChange DrawableWrapper.java:331
6
android.graphics.drawable.Drawable.setState Drawable.java:736
7
android.view.View.drawableStateChanged View.java:19223
8
android.widget.TextView.drawableStateChanged TextView.java:4673
9
android.view.View.refreshDrawableState View.java:19292
10
android.view.View.setPressed View.java:9135
11
android.view.View.setPressed View.java:9113
12
android.view.View.onTouchEvent View.java:12357
13
android.widget.TextView.onTouchEvent TextView.java:10095
14
com.facebook.react.views.textinput.ReactEditText.onTouchEvent ReactEditText.java:163

同じ問題

同じ問題。 同じログトレヌス

RN44.0でも同じです

+1 anotha'one

パッケヌゞャを再起動しおキャッシュをクリアする人は私のために働いた

私にずっおも同じ問題です。 私はRN0.51.0ずreact-native-material-textfield0.12.0を䜿甚しおいたす。

私もこの問題に盎面しおいたす。 奇劙なこずに、スタックトレヌスには有甚な情報が含たれおいないため、゚ラヌを远跡するのが非垞に困難です。 ゚ラヌがどこにあるのかさえわかりたせん。
解決策が芋぀かったらここで曎新したす

RN0.52.0でも同じ゚ラヌが発生したす。

これを投皿しおくれおありがずう 2018幎1月にリリヌスされたReactNativeの最新バヌゞョンv0.53.0を䜿甚しおいないようです。この問題が最新バヌゞョンでも再珟できるこずを確認できたすか

これを終了したすが、v0.53.0以降でも問題が解決しないこずを確認できた堎合は、新しい問題を開いおください。

貢献する方法•メンテナに期埅するこず

0.53.3で同じ問題

同じ問題

@ react-native-bot問題を再開する必芁がありたす

Android8で同じ問題に盎面しおいる

こっちも䞀緒。 React Native 0.53.3、SM-T550、APIレベル25Android 7.0

この問題は、React Native0.53.3-Android8.1で発生したした。

React Native 0.53.3、Android 8、同じ問題

同じ問題、react-native0.53.0およびandroid8。この゚ラヌがランダムに衚瀺されるのは奇劙な原因です。 それを再珟するための正確な手順が芋぀かりたせん。

RN 0.54.2を実行しおいる本番アプリがありたす。これは、アプリの起動時にAndroid8.0.0を実行しおいる䞀郚のナヌザヌに圱響を䞎えるようです。

selection_024

この問題が解決されたのはなぜですか 私たちの䞭には実皌働環境でこの問題に盎面しおいる人もいるため、「パッケヌゞャヌの再起動」は受け入れられない解決策です。

この問題は珟圚のバヌゞョンに圱響するため、再床開く必芁がありたす。

関連する可胜性のあるスタックトレヌスにも盎面しおいたす。

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
       at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
       at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
       at android.view.View.computeOpaqueFlags(View.java:16791)
       at android.view.View.setBackgroundDrawable(View.java:21710)
       at android.view.View.setBackground(View.java:21603)
       at android.view.View.<init>(View.java:5547)
       at android.widget.TextView.<init>(TextView.java:1135)
       at android.widget.EditText.<init>(EditText.java:107)
       at android.widget.EditText.<init>(EditText.java:103)
       at android.widget.EditText.<init>(EditText.java:99)
       at android.widget.EditText.<init>(EditText.java:95)
       at com.facebook.react.views.textinput.ReactEditText.<init>(ReactEditText.java:92)
       at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:94)
       at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:65)
       at com.facebook.react.uimanager.ViewManager.createView(ViewManager.java:46)
       at com.facebook.react.uimanager.NativeViewHierarchyManager.createView(NativeViewHierarchyManager.java:218)
       at com.facebook.react.uimanager.UIViewOperationQueue$CreateViewOperation.execute(UIViewOperationQueue.java:150)
       at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.dispatchPendingNonBatchedOperations(UIViewOperationQueue.java:923)
       at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(UIViewOperationQueue.java:895)
       at com.facebook.react.uimanager.GuardedFrameCallback.doFrame(GuardedFrameCallback.java:31)
       at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(ReactChoreographer.java:136)
       at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(ChoreographerCompat.java:107)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909)
       at android.view.Choreographer.doCallbacks(Choreographer.java:723)
       at android.view.Choreographer.doFrame(Choreographer.java:655)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
       at android.os.Handler.handleCallback(Handler.java:789)
       at android.os.Handler.dispatchMessage(Handler.java:98)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6938)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.DrawableContainer$DrawableContainerState$ConstantStateFuture.get(android.graphics.drawable.DrawableContainer$DrawableContainerState)' on a null object reference
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.getChild(DrawableContainer.java:823)
       at android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:452)
       at android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:104)
       at android.graphics.drawable.Drawable.setState(Drawable.java:680)
       at android.graphics.drawable.DrawableWrapper.onStateChange(DrawableWrapper.java:279)
       at android.graphics.drawable.Drawable.setState(Drawable.java:680)
       at android.graphics.drawable.LayerDrawable.onStateChange(LayerDrawable.java:1381)
       at android.graphics.drawable.Drawable.setState(Drawable.java:680)
       at android.view.View.drawableStateChanged(View.java:17003)
       at android.widget.TextView.drawableStateChanged(TextView.java:3984)
       at android.view.View.refreshDrawableState(View.java:17067)
       at android.view.View.setPressed(View.java:7914)
       at android.view.View.setPressed(View.java:7892)
       at android.view.View.access$2900(View.java:708)
       at android.view.View$CheckForTap.run(View.java:21187)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5451)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

@grabbouこの問題を再開できたすか

ここで同じ問題android8.0 api 26

0.54.2でも同じです。

FlatList内でレンダリングされる<TextInput>に絞り蟌みたした。 これを<Text>に眮き換えるず、問題は解消されたす。

珟圚入手可胜な最新バヌゞョンで耇補しおください。これを再開したす。

ここも同じ@ radko93

Android 8.1 API 27

「䟝存関係」{
"react" "16.3.1"、
"react-native" "0.55.1"、
"react-native-linear-gradient" "^ 2.4.0"、
"react-native-vector-icons" "^ 4.6.0"、
"react-navigation" "^ 1.5.11"
}、

nullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした
createAllFutures
DrawableContainer。 java875
getOpacity
DrawableContainer。 java1158
getOpacity
DrawableContainer。 java433
getOpacity
InsetDrawable。 java258
computeOpaqueFlags
芋る。 java15698
setBackgroundDrawable
芋る。 java20502
setBackground
芋る。 java20395

芋る。 java5238

TextView。 java826

EditText。 java88

EditText。 java84

EditText。 java80

EditText。 java76
setThemedContext
ReactTextInputShadowNode。 java80
createView
UIImplementation。 java282
createView
UIManagerModule。 java366
呌び出す
Method.java
呌び出す
JavaMethodWrapper。 java372
呌び出す
JavaModuleWrapper。 java160
実行
NativeRunnable.java
handleCallback
ハンドラ。 java790
dispatchMessage
ハンドラ。 java99
dispatchMessage
MessageQueueThreadHandler。 java29
ルヌプ
ルヌパヌ。 java164
実行
MessageQueueThreadImpl。 java192
実行
糞。 java764

同じ問題

package.json
「䟝存関係」{
"react" "16.3.1"、
"react-native" "0.55.2"、
}、

build.gradle
compileSdkVersion 26
buildToolsVersion "26.0.2"
minSdkVersion 16

同じ問題。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
    at android.graphics.drawable.DrawableContainer$DrawableContainerState.getChild(DrawableContainer.java:888)
    at android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:466)
    at android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:104)
    at android.graphics.drawable.Drawable.setState(Drawable.java:735)
    at android.graphics.drawable.DrawableWrapper.onStateChange(DrawableWrapper.java:331)
    at android.graphics.drawable.Drawable.setState(Drawable.java:735)
    at android.view.View.drawableStateChanged(View.java:18038)
    at android.widget.TextView.drawableStateChanged(TextView.java:4108)
    at android.view.View.refreshDrawableState(View.java:18107)
    at android.view.View.setPressed(View.java:8536)
    at android.view.View.setPressed(View.java:8514)
    at android.view.View.onTouchEvent(View.java:11262)
    at android.widget.TextView.onTouchEvent(TextView.java:8489)
    at com.facebook.react.views.textinput.ReactEditText.onTouchEvent(ReactEditText.java:162)
    at android.view.View.dispatchTouchEvent(View.java:10054)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2663)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2336)
    at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:432)
    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1841)
    at android.app.Activity.dispatchTouchEvent(Activity.java:3233)
    at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:394)
    at android.view.View.dispatchPointerEvent(View.java:10286)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4514)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4370)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3883)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3953)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3911)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4053)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3919)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4110)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3883)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3953)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3911)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3919)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3883)
    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6359)
    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6333)
    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6288)
    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6469)
    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:193)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:323)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:6295)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:790)

Android7.1.1
React-Native0.48.3

同じ問題。

selection_007

同じ問題、本番環境では、私のデバむスはHUAWEILLD-AL108.0.0です。珟圚、React Native0.46.2を䜿甚しおいたす。ありがずうございたす。

最新バヌゞョンのreact-native0.55.3を䜿甚しおいるずきに同じ問題が発生したす。 この問題は、前述のようにFlatListのTextInputに関連しおいるようです。 Android8.0および8.1で゚ラヌが発生したす。 この問題を回避するための回避策はありたすか

このバグを再珟するには、react-nativeinitを䜿甚しお新しいReactNativeプロゞェクトを䜜成し、App.jsを次のように倉曎したす。

import React, { Component } from 'react';
import {
  StyleSheet,
  TextInput,
  View
} from 'react-native';

type Props = {};
export default class App extends Component<Props> {
  render() {
    const inputs = Array.apply(null, Array(256)).map((_, i) => i)
    return (
      <View>
        {inputs.map(i => <TextInput key={i} />)}
      </View>
    );
  }
}

MacOS10.13.3のAndroid8.0.0を搭茉したGalaxyS8でこれを実行しおいたした。

"dependencies": {
    "react": "16.3.1",
    "react-native": "0.55.3"
},

゚ラヌがTextInputsの数に盎接関係しおいないかどうかはわかりたせんが、これがこのバグをかなり信頌できる方法で再珟できる唯䞀の方法です。 128の入力では、再起動のたびにこの゚ラヌは発生したせんでしたが、数回リロヌドした埌、発生したした。 256個の裞のTextInputで、゚ラヌが発生せずにアプリケヌションを起動できなかったず思いたす。 たた、TextInputsの間に芁玠を远加するず、この゚ラヌが発生する可胜性が䜎くなるように思われるため、TextInputsの数に盎接関係しおいない可胜性が高いこずにも気づきたした。 珟圚のアプリケヌションでこれを詊したしたが、開始画面に数癟のTextInputを远加しおもこの゚ラヌが発生したしたが、他の芁玠でラップされた同量のTextInputを持぀他のビュヌでは、アプリケヌションにいく぀かあるため、垞にこの゚ラヌが発生するずは限りたせん。 。

同じ問題がありたす。 私はこれをAndroid8.0.0を搭茉したHuaweiP10で実行しおいたした。
"react": "^16.2.0", "react-native": "^0.55.0",
スクリヌンショット

問題はTextInputsにあるようです。 これは私のHuaweiP10Android 8.0.0で発生したす。 これに察する修正はすでにありたすか

Android7.1.1
"react-native" "0.53.3"、
image

これを投皿しおくれおありがずう 問題が叀いバヌゞョンのReactNativeを参照しおいる可胜性があるようです。 最新リリヌスv0.55で問題を再珟できたすか

貢献しおいただきありがずうございたす。

私は同じ問題に盎面しおいたす。 これは、TextInputコンポヌネントに関連しおいたす。 画面にレンダリングされおいる単䞀のTextInputでさえ、この゚ラヌを匕き起こしおいたす。 回避策はありたすか

反応ネむティブ0.55
反応16.3.1

ReactEditTextコンストラクタヌ「super」を倉曎したしたが、発生しないようです。
しかし、「underlineColorAndroid」をコメントアりトしたす
https://github.com/yuanboGeng/react-native/commit/36f7949f9a3e9c1f3b10df43a9f495f9f8712a1f
反応ネむティブ0.53.3
反応16.2.0

これは、゚ミュレヌタヌをAPIレベル21からAPIレベル26にアップグレヌドした埌に発生し始めたした。

開発䞭に理由もなくこの゚ラヌが衚瀺されたした。 / buildフォルダヌをクリヌンアップし、 run-android再床実行したした。 問題は消えたした。 本圓に倉だ。 クリヌンビルドでこれが解決されるこずを願っおいたす。

これず同じ問題がありたす。 小さな違いが1぀ありたす。私の堎合、VirtualizedListFlatListの芪内にTextInputsをネストしおいたすが、そのリストをスクロヌルし始めたずきにのみ問題が発生し、それでも垞にではなく断続的にしか発生したせん。 他の人ず同様に、これは実皌働環境で発生しおいるため、パッケヌゞャヌを再起動するこずはできたせん。

いく぀かの掘り䞋げに基づいお、Android自䜓の叀い問題に関連しおいるようです https 
それが根本的な問題である堎合、これは、RNプロゞェクトのcompileSdkずサポヌトラむブラリのバヌゞョンをアップグレヌドするだけで解決されたす。 ただし、そのLoEはわかりたせん。

曎新このSOの投皿で説明されおいるように、サブプロゞェクトにビルドツヌルずcompileSdkのより高いバヌゞョンを䜿甚するように匷制しようずしおも、私のプロゞェクトではこの問題は解決したせんでした。 これらの䞊䜍バヌゞョンを間違っお適甚しただけなのか、ビルドセットアップがRNをそのようにサブプロゞェクトずしお扱っおいないのか、それずも実際にはここでの問題の有効な解決策ではなかったのかはわかりたせん。

線集2 ReactEditTextは

線集3それは解決策ではありたせんでした。 この問題がリンクされたAOSPの問題ず同じであるず私はもはや確信しおいたせん。
テキストをどの皮類のScrollViewに配眮するかは問題ではないようです。VirtualizedListずScrollViewの䞡方で再珟できたしたが、このスレッドの倚くはFlatListを䜿甚しお再珟したした。

私はこれを本番環境で持っおいたす

私もこの問題に盎面しおいたす。 @mbretが指摘したように、 cd android ; ./gradlew clean ; cd .. ; react-native run-android実行するずうたくいきたすありがずう

すばらしいですが、実際のクラむアントで本番環境にあるアプリはどうでしょうか。 |

申し蚳ありたせんが@ahanusek 、これで問題が解決したずは蚀っおいたせん。開発ではこれがうたくいったず蚀っおいるだけです他の誰かにも圹立぀こずを願っおいたす。

しかし、開発の堎合でも、それは解決策ではありたせん。 ビルドをクリヌンアップしおアプリを再起動したすが、入力を「ほずんど」䜿甚しないず、この゚ラヌが再び発生する可胜性がありたす。

@ahanusekはい、私はあなたに同意したす、そしお決しおあなたず議論しおいたせん。 これは解決策ではありたせんが、私にずっお、そしお今のずころ、それは私が開発を続けるこずを可胜にするために働いおいたす

これも芋お、v0.55.4

screen shot 2018-06-12 at 1 05 41 pm

FlatListたたはVirtualizedListにTextFieldがないこずはかなり確かです、fwiw。 これは、本番ビルドで発生しおいたす。

v0.55.4この問題が発生しおいたす。 はい、リストでTextInputしおいたす。

2018-06-13_23-04-20_scrot

反応0.55で起こりたす。 以䞋

フラットリストの入力を䜿甚しお、react native0.55でも発生したす。

私の線集したコメントが衚瀺されない堎合に備えお、ここに実際の投皿を䜜成したす。

テキストをどの皮類のScrollViewに配眮するかは問題ではないようです。VirtualizedListずScrollViewの䞡方で再珟できたしたが、このスレッドの倚くはFlatListを䜿甚しお再珟したした。
たたは、別の蚀い方をすれば、問題は芁玄するず
RN Crashes when loading a very large number of TextInputs. Usually this happens in a ScrollView (or some descended component class of one), but one person got it to happen in a plain View

同じ問題

私も同じ問題に盎面しおいたす。

䞍思議なこずに、これは昚倜たで私に起こり始めたせんでした、そしお私は珟圚開発䞭の1ヶ月以䞊の間同じ方法でTextInputsをレンダリングしおきたした。

Androidバヌゞョン9
React「16.3.1」
React-Native "〜0.55.2"

コヌドでも同様の問題に盎面しおいたした

クラッシュログ
臎呜的な䟋倖java.lang.NullPointerExceptionnullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした
android.graphics.drawable.DrawableContainer $ DrawableContainerState.createAllFuturesDrawableContainer.java:875で
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getOpacityDrawableContainer.java:1158で
android.graphics.drawable.DrawableContainer.getOpacityDrawableContainer.java:433で
android.graphics.drawable.InsetDrawable.getOpacityInsetDrawable.java:258で
android.view.View.computeOpaqueFlagsView.java:16791で
android.view.View.setBackgroundDrawableView.java:21710で
android.view.View.setBackgroundView.java:21603で
android.view.Viewで。View.java:5547
android.widget.TextViewで。TextView.java:1135
android.widget.EditTextで。EditText.java:107
android.widget.EditTextで。EditText.java:103
android.widget.EditTextで。EditText.java:99
android.widget.EditTextで。EditText.java:95
com.facebook.react.views.textinput.ReactEditTextで。ReactEditText.java:92

ここでの問題は䜕だず思われたすか
いく぀かの調査を詊みたした
-玔粋なAndroidアプリで1000以䞊のedittextが動䜜したす
-ここで特定されおいるように、玄200のReactTextInputが倱敗したす

  • この問題を分析したずころ、SparseArrayから抜け出した奇劙なマルチスレッドシナリオが明らかになりたした。
    -SparseArrayはスレッドセヌフではなく、同時にその䞭にgcのロゞックがありたす
    -SparseArrayはDrawableContainerStateに䜿甚され、新しいDrawableContainerStateは、既存の定数状態のドロヌアブルフュヌチャヌこれはSparseArrayを䜿甚しおクロヌンを䜜成するこずで䜜成できたす。
    -䞊蚘はマルチスレッドのnullpointer䟋倖のレシピであり、以䞋のように発生したす
    -React Edit Textシャドりノヌドの䜜成ずそのラむフサむクルに取り組んでいるネむティブモゞュヌルスレッドは、新しいEditTextreactthemedcontextを実行したす。これにより、バックグラりンドドロヌアブルが蚭定され、最終的にSparseArrayスレッドの安党でないコヌドが呌び出されたす。
    -䞀方、UIスレッドを䜿甚しお、他のRTIの衚瀺EditTextを同時に䜜成し、同じSparseArrayスレッドの安党でないコヌドを䜜成するこずができたす。
    -nullpointer䟋倖は、gcが呌び出され、同時にクロヌンこのクロヌンはDrawable *クラスで内郚的に発生したすが同じオブゞェクトに察しお実行され、郚分的にgcされたオブゞェクトが発生した堎合に発生したす。 倀配列のアむテムのようなものが削陀されおnullになりたしたが、noOfItemsフラグはただ曎新されおいないため、クロヌンオブゞェクトにはnoOfItemsフラグで指定されたアむテムよりも1぀少ないアむテムがあり、反埩によっお削陀されたむンデックスのnullポむンタヌ䟋倖が発生する可胜性がありたす。

どのように解決たたは機胜させたしたか
[1] UIスレッドでも新しいEditTextcontext呌び出しを移動し、ShadowNode非同期を枬定したしたが、このEditTextオブゞェクトがUIスレッドで䜜成されるたで埅機したす-基本的にシャドりノヌドのsetThemedContext関数ず枬定関数を曞き盎したした
欠点すべおのRTIのスレッドスむッチ

[2]ネむティブモゞュヌルでレむアりトむンフレヌタを䜿甚しおEditTextを䜜成し、背景にnullを指定し、UIスレッドでEditTextを䜜成し、その背景描画可胜オブゞェクトをshadowNodeレベルでキャッシュするこずにより、背景描画可胜オブゞェクトを1回だけ䜜成したす。 このドロヌアブルは、レむアりトむンフレヌタを䜿甚しお䜜成されたdummyEditTextsの背景を蚭定しお、ドロヌアブルの境界線のパディングをメゞャヌに考慮させるために䜿甚されたす。 この堎合、メゞャヌはDrawableの䜜成を1回埅぀だけで枈みたす。

私は䞡方をテストしたしたが、1024ReactTextInputで正垞に動䜜したす。

泚調査に基づくず、これは実際には最も掗緎された解決策ではないようですが、最小限の倉曎で機胜し、問題の分析を蚌明したす。

提案や批刀は倧歓迎です

シャドりノヌドコヌド

`パッケヌゞ.richtextinput;
android.content.Contextをむンポヌトしたす。
android.graphics.drawable.Drawableをむンポヌトしたす。
android.os.Buildをむンポヌトしたす。
android.text.Layoutをむンポヌトしたす。
android.view.LayoutInflaterをむンポヌトしたす。
android.view.ViewGroupをむンポヌトしたす。
import android.widget.EditText;
むンポヌトcom.facebook.infer.annotation.Assertions;
むンポヌトcom.facebook.react.bridge.JSApplicationIllegalArgumentException;
むンポヌトcom.facebook.react.common.annotations.VisibleForTesting;
むンポヌトcom.facebook.react.uimanager.Spacing;
むンポヌトcom.facebook.react.uimanager.ThemedReactContext;
むンポヌトcom.facebook.react.uimanager.UIViewOperationQueue;
むンポヌトcom.facebook.react.uimanager.annotations.ReactProp;
むンポヌトcom.facebook.react.views.text.ReactBaseTextShadowNode;
むンポヌトcom.facebook.react.views.text.ReactTextUpdate;
import com.facebook.react.views.textinput.ReactTextInputLocalData;
むンポヌトcom.facebook.react.views.view.MeasureUtil;
むンポヌトcom.facebook.yoga.YogaMeasureFunction;
むンポヌトcom.facebook.yoga.YogaMeasureMode;
むンポヌトcom.facebook.yoga.YogaMeasureOutput;
むンポヌトcom.facebook.yoga.YogaNode;
むンポヌト.R;

import javax.annotation.Nullable;
//泚このクラスは、ReactTextInputShadowNodeが期埅するメカニズムず倧差ありたせん。
//テヌマコンテキストの蚭定ず枬定の実行
パブリッククラスReactTextInputShadowNodeはReactBaseTextShadowNodeを拡匵しYogaMeasureFunctionを実装したす
{{
@VisibleForTesting
public static final String PROP_TEXT = "text";
private static Drawable sDummyEditTextBackgroundDrawable = null;

private int mMostRecentEventCount = UNSET;
private <strong i="13">@Nullable</strong> EditText mDummyEditText;
private <strong i="14">@Nullable</strong> ReactTextInputLocalData mLocalData;
// Represents the {<strong i="15">@code</strong> text} property only, not possible nested content.
private <strong i="16">@Nullable</strong> String mText = null;

public ReactRichTextInputShadowNode()
{
    mTextBreakStrategy = (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) ?
            0 : Layout.BREAK_STRATEGY_SIMPLE;
    setMeasureFunction(this);
}

<strong i="17">@Override</strong>
public void setThemedContext(final ThemedReactContext themedContext)
{
    super.setThemedContext(themedContext);

    // Inflating with layout using background as null because new EditText(context) call
    // can cause NullPointer Exception during a race scenario of UI thread performing EditText
    // creation with background at the same time
    //   BACKGROUND:
    // ---------------
    // SparseArray is not threadsafe and at the same time there is logic of gc() inside it
    // SparseArray is used by DrawableContainerState and new DrawableContainerState may get
    // created using the an existing constant state's drawable futures(this is SparseArray) by
    // cloning
    // The above is a recipe for a multi-threaded null pointer exception and it happens as below
    //    - Native module thread working on RTI shadow node creation and its lifecycle does a
    //      new EditText(reactThemedContext) which in turn results in background drawable to be
    //      set and finally invoking the SparseArray thread unsafe code
    //    - UI thread meanwhile could be used to create the display EditText of some other RTI
    //      at the same time leading up to the same SparseArray thread unsafe code
    //    - Null pointer exception happens when the gc() is invoked and simultaneously clone is
    //      being done for the same object giving rise to a partially gc-ed object. Something
    //      like an item from values array was removed and null-ed but the noOfItems flag is yet
    //      to be updated, so cloned object has one item less than specified in noOfItems flag
    //      and iteration can cause null pointer exception for the deleted index.
    //
    //   Solution:
    // ------------
    // Create EditText using layout inflater on Native module while specifying null for
    // background and create only once the background drawable by creating an EditText on UI
    // thread and caching its background drawable at shadowNode level. In this case measure only
    // needs to wait once for the Drawable creation
    //      Shortcomings: Ideally we would like to create the Drawable on the same Native module
    //                    thread but not able to access android.internal stylable ids to
    //                    approach this solution

    LayoutInflater sInflater =
            (LayoutInflater) themedContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    EditText editText  =
            (EditText) sInflater.inflate(R.layout.dummy_edit_text, null, false);

    // creating the EditText theme background on UI thread async to prevent above mentioned race
    // scenario
    if (sDummyEditTextBackgroundDrawable == null) {
        themedContext.runOnUiQueueThread(new Runnable() {
            <strong i="18">@Override</strong>
            public void run() {
                sDummyEditTextBackgroundDrawable = new EditText(themedContext).getBackground();
            }
        });
    }

    mDummyEditText = editText;
}

<strong i="19">@Override</strong>
public long measure(YogaNode node, float width, YogaMeasureMode widthMode, float height,
        YogaMeasureMode heightMode)
{
    // measure() should never be called before setThemedContext()
    EditText editText = Assertions.assertNotNull(mDummyEditText);

    if (mLocalData == null || sDummyEditTextBackgroundDrawable == null)
    {
        // No local data or edit text background drawable, no intrinsic size.
        return YogaMeasureOutput.make(0, 0);
    }

    // {<strong i="20">@code</strong> EditText} has by default a border at the bottom of its view
    // called "underline". To have a native look and feel of the TextEdit
    // we have to preserve it at least by default.
    // The border (underline) has its padding set by the background image
    // provided by the system (which vary a lot among versions and vendors
    // of Android), and it cannot be changed.
    // So, we have to enforce it as a default padding.
    // Sharing the same background drawable is not working in measure and Edit Text features.
    // Hence, cloning.
    editText.setBackground(sDummyEditTextBackgroundDrawable.getConstantState().newDrawable());
    setDefaultPadding(Spacing.START, editText.getPaddingStart());
    setDefaultPadding(Spacing.TOP, editText.getPaddingTop());
    setDefaultPadding(Spacing.END, editText.getPaddingEnd());
    setDefaultPadding(Spacing.BOTTOM, editText.getPaddingBottom());

    // We must measure the EditText without paddings, so we have to reset them.
    editText.setPadding(0, 0, 0, 0);

    // This is needed to fix an android bug since 4.4.3 which will throw an NPE in measure,
    // setting the layoutParams fixes it: https://code.google.com/p/android/issues/detail?id=75877
    editText.setLayoutParams(
          new ViewGroup.LayoutParams(
                  ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

    mLocalData.apply(editText);
    editText.measure(
          MeasureUtil.getMeasureSpec(width, widthMode),
          MeasureUtil.getMeasureSpec(height, heightMode));
    return YogaMeasureOutput.make(editText.getMeasuredWidth(), editText.getMeasuredHeight());
}

<strong i="21">@Override</strong>
public boolean isVirtualAnchor()
{
    return true;
}

<strong i="22">@Override</strong>
public boolean isYogaLeafNode()
{
    return true;
}

<strong i="23">@Override</strong>
public void setLocalData(Object data)
{
    Assertions.assertCondition(data instanceof ReactTextInputLocalData);
    mLocalData = (ReactTextInputLocalData) data;
    // Telling to Yoga that the node should be remeasured on next layout pass.
    dirty();
    // Note: We should NOT mark the node updated (by calling {<strong i="24">@code</strong> markUpdated}) here
    // because the state remains the same.
}
@ReactProp(name = "mostRecentEventCount")
public void setMostRecentEventCount(int mostRecentEventCount)
{
    mMostRecentEventCount = mostRecentEventCount;
}

@ReactProp(name = PROP_TEXT)
public void setText(<strong i="25">@Nullable</strong> String text)
{
    mText = text;
    markUpdated();
}

public <strong i="26">@Nullable</strong> String getText()
{
    return mText;
}

<strong i="27">@Override</strong>
public void setTextBreakStrategy(<strong i="28">@Nullable</strong> String textBreakStrategy)
{
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
    {
        return;
    }
    if (textBreakStrategy == null || "simple".equals(textBreakStrategy))
    {
        mTextBreakStrategy = Layout.BREAK_STRATEGY_SIMPLE;
    }
    else if ("highQuality".equals(textBreakStrategy))
    {
        mTextBreakStrategy = Layout.BREAK_STRATEGY_HIGH_QUALITY;
    }
    else if ("balanced".equals(textBreakStrategy))
    {
        mTextBreakStrategy = Layout.BREAK_STRATEGY_BALANCED;
    }
    else
    {
        throw new JSApplicationIllegalArgumentException("Invalid textBreakStrategy: " +
                textBreakStrategy);
    }
}

<strong i="29">@Override</strong>
public void onCollectExtraUpdates(UIViewOperationQueue uiViewOperationQueue)
{
    if (mMostRecentEventCount != UNSET)
    {
        ReactTextUpdate reactTextUpdate =
            new ReactTextUpdate(
                    spannedFromShadowNode(this, getText()),
                    mMostRecentEventCount,
                    mContainsImages,
                    getPadding(Spacing.LEFT),
                    getPadding(Spacing.TOP),
                    getPadding(Spacing.RIGHT),
                    getPadding(Spacing.BOTTOM),
                    mTextAlign,
                    mTextBreakStrategy);
        uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate);
    }
}

<strong i="30">@Override</strong>
public void setPadding(int spacingType, float padding)
{
    super.setPadding(spacingType, padding);
    markUpdated();
}

} `

ダミヌ線集テキストレむアりトファむル

<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dummy_edit_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" />

@sayantanbugsこの゜リュヌションのコヌドはありたすか ありがずう

私の最埌のコメントを曎新しお、ShadowNodeコヌドずダミヌの線集テキストを膚らたせるのに䜿甚されるレむアりトを含めたした

@ sayantanbugs-それは玠晎らしい🕵䜜品です 私たちのプロゞェクトでそれを詊しお、報告したす ありがずう

同じ問題
ReactNative0.55.4
Android8.0

@sayantanbugs差分/パッチを提䟛しおいただけたすか

同じ問題。 他の詳现なしでCrashlyticsを介しお報告されたため、トラブルシュヌティングが非垞に困難です。

RN 55.3
Android 8

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
       at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
       at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
       at android.view.View.computeOpaqueFlags(View.java:16791)
       at android.view.View.setBackgroundDrawable(View.java:21710)
       at android.view.View.setBackground(View.java:21603)
       at android.view.View.<init>(View.java:5547)
       at android.widget.TextView.<init>(TextView.java:1135)
       at android.widget.EditText.<init>(EditText.java:107)
       at android.widget.EditText.<init>(EditText.java:103)
       at android.widget.EditText.<init>(EditText.java:99)
       at android.widget.EditText.<init>(EditText.java:95)
       at com.facebook.react.views.textinput.ReactTextInputShadowNode.setThemedContext(ReactTextInputShadowNode.java:80)
       at com.facebook.react.uimanager.UIImplementation.createView(UIImplementation.java:282)
       at com.facebook.react.uimanager.UIManagerModule.createView(UIManagerModule.java:366)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
       at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160)
       at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
       at android.os.Handler.handleCallback(Handler.java:789)
       at android.os.Handler.dispatchMessage(Handler.java:98)
       at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
       at android.os.Looper.loop(Looper.java:164)
       at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:192)
       at java.lang.Thread.run(Thread.java:764)

これが、本番環境でアプリがクラッシュする䞻な原因です。 これはい぀/どのように起こりたすか

ここの本番ビルドでも同じです。
テキストを線集するずきに発生したす。 それはランダムです。

反応16.3.0
react- native0.54.4
同じ問題、それを修正する方法は

^^^より倚くの人が@sayantanbugs゜リュヌションで問題を修正しようずする必芁がreact-nativeフォルダヌでReactTextInputShadowNode.javaファむルを芋぀けお、圌が提䟛したコヌドを亀換するだけです。 びっくりするかもしれたせん。

それを行っおから1週間埌、゚ラヌが2回だけ発生したこずを報告できおうれしいです。 しかし、今回は違いたした。 react-native run-androidを介しおアプリを再むンストヌルするこずなく、アプリを再起動しお正垞に動䜜させるこずができたした。これは、文字通りいく぀かの画面にアクセスできなくなる前に、本圓に苊痛でした。それらのTextInputsをレンダリングしたした。 ゚ラヌが再び発生した堎合は匕き続き泚意したすが、これたでのずころ、ほが完党に機胜しおいるず思いたす。 優れたデバッグ、@ sayantanbugs

@ Friendly-Robotimoそれは解決策ではありたせん。 せいぜい回避策です。 これは、テストされおいない゜リュヌションにパッチを適甚するだけでは修正できないず認めおいる本番コヌドで発生しおいたす。

それが開発者に迷惑をかけるなら、確かに、どうしおも。 しかし、それを解決策ずしお䜿うように人々を動機付けるのは賢明ではないず思いたす。 おそらくPRの基瀎ずしお。

@ Friendly-Robotに同意したしたそれでも、@ sayantanbugsに感謝したす。 ここにRNの人はいたすか パッチがRNリポゞトリに到達しおテストできるず思いたすか

さお、私は぀いにdrawableStateChanged() 、パッチを適甚したReactEditText独自のコピヌを提䟛できたす。

  <strong i="9">@Override</strong>
  protected void drawableStateChanged() {
    try {
      super.drawableStateChanged();
    } catch (Exception e) {
      Timber.e("Prevented Drawable crash!");
    }
  }

これは文字通り単なるパッチですが、少なくずもアプリケヌションはクラッシュしたせん。 私の知る限り、テキスト入力は䟝然ずしお応答性が高く、期埅どおりに機胜したす。

珟圚修正されおいるクラッシュを再珟するず、この実際の䟋倖が数回連続しお発生しおいるこずがわかりたした。

線集
うヌん...すべおが機胜しおいるように芋えたすが、Drawable状態が氞続的に砎損しおいるようです。 新しいテキスト入力で完党に新しいビュヌを䜜成した埌でも、テキスト入力に觊れるず、メッセヌゞが再び衚瀺されたす。 幞い、入力をクリックしたずきにのみ衚瀺され、テキストを入力したずきには衚瀺されたせん。

今倜、ビュヌずトランゞションで遊んでいたすが、この゚ラヌが20回発生したした...䜕もしおいたせんでしたが、ナビゲヌションをクリックしおビュヌ間のトランゞションをテストしたした。 それは倧したこずだず思いたす/

゜リュヌションをテストしおくれた@ Friendly-Robotに感謝したす

私の゜リュヌションがパッチであるずいうほずんどの芋解に同意し、゜リュヌションを含む元の投皿でそのこずを述べたした。 それが私のプロゞェクトでただ䜿甚できる理由は、RNRTIを拡匵するより機胜豊富なRTIを䜜成したためです。 したがっお、カスタムRTIのShadowNode実装で゜リュヌションを䜿甚できたす。 実際、私たちのプロゞェクトでは、倚くのRNバグ/ナヌスケヌスを修正するためにRNの修正バヌゞョンを維持しおいるため、これらの倉曎をそれに加えるこずもできたす。

その間に数日のうちに目前の燃焌問題を解決しなければならなかったので、私はこれに他の可胜性に぀いおもう䞀床芋盎す぀もりです。

フィヌドバックをありがずうございたす

@davidmontemayor 、私の修正でドロヌアブル状態の問題に気付いた堎合は、shadowNodeを倉曎しお、垞に新しいEditTextを実行したすが、その呌び出しをUIthreadに移動し、ドロヌアブルを凊理しないようにするこずができたす。 それは間違いなくそれを修正するでしょう。 シャドりノヌドの本圓の目的が単に背景の境界線のパディングを取埗するこずであった堎合、スレッドを切り替えるのは非効率的な方法であるため、これはやりたくありたせんでしたが、RNで採甚されおいるメカニズムはそのように動䜜しおいたせんが、副䜜甚がありたす。
これにより、メゞャヌ関数を䜿甚する以倖に、この時点で䜿甚されおいる方法でEditTextオブゞェクトを必芁ずしないように、ShadowNodeを自分で曞き盎しおいる可胜性があるず考えられたす。

私にも起こりたす。 ScrollViewを䜿甚しおいたす。
スクロヌルビュヌにさたざたなコントロヌルラゞオ、リスト、゚ディットテキストなどがありたす。 私は最倧10のコントロヌルを持っおいるず思うので、巚倧なリストではありたせん。
しかし、再珟するのは難しいです。 ランダムな時間に発生するようですが、画面にScrollViewが衚瀺されおいる堎合線集テキストコントロヌルが含たれおいる堎合、アプリをバックグラりンドからフォアグラりンドに移動するたで远跡しおいるず思いたす。
100確実ではありたせんが
それがAndroidサポヌトlibバヌゞョンに関連しおいるかどうか疑問に思いたす。

FBに来お、このバグを修正しおください。
このようなランダムなクラッシュが発生した堎合、本番品質のアプリを䜜成するのは困難です。

com.facebook.react.views.textinput.ReactEditText
RN 0.54
Android SDK 27
電話8.1

この問題もあり、ScrollViewsも䜿甚しおいたす。 @davidmontemayor 、ディレクトリ構造で線集したファむルに圌のRN newbを転送できたすか クラッシュがむラむラする圱響を及がしおいるアプリを垂堎に出しおおり、修正が行われるたで、あなたず同じように゚ラヌをキャッチしたいず思っおいたした。 䜿甚したファむルの䟋はありたすか

同じ

NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference

@ Squidski-残念ながら、 EditText初期化の倱敗に察凊し始めるず、「 catch'emall 」の修正は非垞にトリッキヌになりたす。 背景ずしお、この問題が顕圚化する2぀の異なる方法がありたす。

  • ReactEditTextがむンスタンス化されたずき android.widget.EditText.<init>(EditText.java:95) 
  • ReactEditTextが android.widget.TextView.onTouchEvent(TextView.java:8467) ず盞互䜜甚するずき

重芁なのは、 ReactTextInputShadowNode䜜成されたビュヌを眮き換えるこずです。 new EditText(getThemedContext())実行させる代わりに、 EditTextから拡匵する独自のクラスを䜜成したす。 次に、 drawableStateChanged()の2番目のパスによっお匕き起こされた䟋倖をキャッチできたす。

難しいのは、初期化゚ラヌを修正するこずです。 そのためには、 EditText.setBackground()枡される叀いドロヌアブルをラップするために䜿甚できる「DrawableWrapper」クラスを䜜成する必芁がありたす。 このラッパヌは、デリゲヌトからスロヌされた䟋倖をキャッチする必芁がありたす。

この問題は、2018幎7月25日の時点で、最新バヌゞョンのReact Native +最新のJSC +最新のgradleを䜿甚しおいるアプリで匕き続きランダムに発生したす

React Native Environment Info:
    System:
      OS: macOS High Sierra 10.13.3
      CPU: x64 Intel(R) Core(TM) i5-5250U CPU @ 1.60GHz
      Memory: 26.19 MB / 8.00 GB
      Shell: 5.3 - /bin/zsh
    SDKs:
      iOS SDK:
        Platforms: iOS 11.4, macOS 10.13, tvOS 11.4, watchOS 4.3
    IDEs:
      Android Studio: 3.1 AI-173.4720617
      Xcode: 9.4.1/9F2000 - /usr/bin/xcodebuild
    npmPackages:
      react: ^16.4.1 => 16.4.1
      react-native: ^0.56.0 => 0.56.0
    npmGlobalPackages:
      react-native-cli: 2.0.1

JSC: org.webkit:android-jsc:r224109
Gradle: 4.8.1

この問題は、Android8.0.0およびRN0.55.3で発生し始めたした。 これたたはPRの回避策はありたすか

TextInputsのFlatListでも同じ問題がランダムに発生したす😞

  • React-Native0.55.4

java.lang.NullPointerExceptionMainActivity

java.lang.NullPointerException Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference 
    DrawableContainer.java:875 android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures
    DrawableContainer.java:1158 android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity
    DrawableContainer.java:433 android.graphics.drawable.DrawableContainer.getOpacity
    InsetDrawable.java:258 android.graphics.drawable.InsetDrawable.getOpacity
    View.java:15842 android.view.View.computeOpaqueFlags
    View.java:20658 android.view.View.setBackgroundDrawable
    View.java:20551 android.view.View.setBackground
    View.java:5290 android.view.View.<init>
    TextView.java:832 android.widget.TextView.<init>
    EditText.java:88 android.widget.EditText.<init>
    EditText.java:84 android.widget.EditText.<init>
    EditText.java:80 android.widget.EditText.<init>
    EditText.java:76 android.widget.EditText.<init>
    ReactTextInputShadowNode.java:80 com.facebook.react.views.textinput.ReactTextInputShadowNode.setThemedContext
    UIImplementation.java:282 com.facebook.react.uimanager.UIImplementation.createView
    UIManagerModule.java:366 com.facebook.react.uimanager.UIManagerModule.createView
    Method.java:-2 java.lang.reflect.Method.invoke
    JavaMethodWrapper.java:372 com.facebook.react.bridge.JavaMethodWrapper.invoke
    JavaModuleWrapper.java:160 com.facebook.react.bridge.JavaModuleWrapper.invoke
    NativeRunnable.java:-2 com.facebook.react.bridge.queue.NativeRunnable.run
    Handler.java:790 android.os.Handler.handleCallback
    Handler.java:99 android.os.Handler.dispatchMessage
    MessageQueueThreadHandler.java:29 com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage
    Looper.java:164 android.os.Looper.loop
    MessageQueueThreadImpl.java:192 com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run
    Thread.java:764 java.lang.Thread.run

読曞ずデバッグに基づいお、私は今週末に次のこずを詊すこずにしたした...

  1. コヌドからすべおのunderlineColorAndroid呌び出しを削陀したすreact-native-elements 0.19を䜿甚しおいたす

    • アプリは、EditTextコントロヌルにtransparentを䜿甚するようにフォヌルバックする必芁がありたす
    • たた、匷制的に透明にしおみおください
  2. Androidのスタむルを次のように曎新したす。 これにより、すべおのEditTextコントロヌルの背景が透明になりたす

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:editTextStyle">@style/AppEditTextStyle</item>
        <item name="editTextStyle">@style/AppEditTextStyle</item> <!-- For compatibility with the support library -->

    </style>

    <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
        <item name="android:background"><strong i="15">@android</strong>:color/transparent</item>
    </style>

</resources>
  1. テスト-テスト-テスト。 問題の再珟は困難です。 クラむアントは今朝それに぀たずいたが。

  2. フォヌルバックずしお、@ sayantanbugsからの修正を実装したす
    4.1react-native-elementsを1.0xxベヌタに曎新

読み
https://issuetracker.google.com/issues/37068452
https://github.com/facebook/react-native/issues/18214

RN 0.54
React-native-elements 0.19

RN 0.56.0 Android8.1.0で発生したす
それを前進させる蚈画があるかどうか疑問に思いたす。

のすべおのむンスタンスを眮き換えおみおください
underlineColorAndroid={"transparent"}
ず
underlineColorAndroid={"#00000000"}

この問題が発生しおいたす。 トリッキヌな䜕かでそれを解決したす。 珟圚の入力のレンダリングを凊理するボタンを䜜成したす。 ぀たり、ボタンのFlatListがあり、珟圚線集しおいるのはTextInputだけです。 参照がない堎合、線集入力を開始するにはダブルクリックする必芁がありたす

handleShowInput(key) {
    const { inputKeyToShow } = this.state;

    if (!inputKeyToShow) {
        this.setState({
            inputKeyToShow: key,
        }, () => this.textInput.focus());
    } else {
        this.setState({
            inputKeyToShow: null,
        });
    }
}
{inputKeyToShow !== key ?
    (
        <TouchableOpacity
            ...
            onPress={() => this.handleShowInput(key)}
        >
            <Text>{value}</Text>
        </TouchableOpacity>
    ) :
    (
        <TextInput
            ...
            ref={ref => (this.textInput = ref)}
            value={value}
            onEndEditing={() => this.handleShowInput(key)}
        />
    )
}

@WilliamAlexander @paulroy゜リュヌションは機胜したしたか

@xstreamcl私が投皿した゜リュヌションは、これたでのずころ機胜しおいたす。 2週間以䞊、問題は発生しおいたせん。
ただし、さらにテストが必芁です;

この問題により、本番環境でもアプリがクラッシュしたした。 再珟するのが本圓に難しいので、それは厄介なバグです。 私たちのアプリの有望な修正を芋぀けたした。他の人の時間ずフラストレヌションを節玄できるように、ここで私たちの発芋を共有したいず思いたす。

仕様ずバヌゞョン

このバグにより、Samsung、Google、およびLGAndroidデバむスでアプリがクラッシュしたした。 次のAndroidバヌゞョンからクラッシュレポヌトがありたす。

  • 8.0.0
  • 8.1.0
  • 7.1.1

私たちのアプリは実行されおいたす

  • react-native 0.53.0
  • react 16.2.0

クラッシュの原因

他の人がこのスレッドで指摘しおいるように、この問題はTextInput 、 FlatList 、およびScrollViewコンポヌネントの組み合わせをレンダリングするこずによっお匕き起こされるようです。 この䟋では、 FlatList䞊にレンダリングされた単䞀のTextInputを含む画面がありたす。 FlatListのアむテムの1぀をタップするず、アプリはフォヌムを含む新しい画面に移動したす。 このフォヌムのルヌトコンポヌネントはScrollViewで、いく぀かのTextInputコンポヌネントが含たれおいたすいく぀かのボタンやその他のカスタムコンポヌネントも含たれおいたす。 ナヌザヌがこれらのFlatListアむテムのいずれかをタップするず、アプリがクラッシュしたす毎回発生するわけではないこずに泚意しおください。

この問題を再珟するこずは困難です。 実際、私たちはそうするこずができたせんでした。 ただし、Appseeセッションの蚘録を芋るず、ワヌクフロヌのこの時点でクラッシュが発生しおいるこずがわかりたす。

問題を再珟できないため、Appseeのクラッシュログを䜿甚しおデバッグする必芁がありたした。 以䞋のクラッシュレポヌトからスタックトレヌスをコピヌしたしたそしお、いく぀かのノむズの倚いセクションを省略したした。 これは、他の人がこのスレッドに投皿したスタックトレヌスずほが同じです。

0   java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
1   at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
2   at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
3   at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
4   at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
5   at android.view.View.computeOpaqueFlags(View.java:16900)
6   at android.view.View.setBackgroundDrawable(View.java:21824)
7   at android.view.View.setBackground(View.java:21717)
8   at android.view.View.<init>(View.java:5577)
9   at android.widget.TextView.<init>(TextView.java:1144)
...
13  at android.widget.EditText.<init>(EditText.java:96)
14  at com.facebook.react.views.textinput.ReactEditText.<init>(ReactEditText.java:91)
15  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:91)
16  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:61)
...
35  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

問題の原因

このスレッドを読み、数時間たたは調査を行った埌、 ReactTextInputManager.javaファむルにunderlineColorAndroid propハンドラヌが芋぀かりたした。

@ReactProp(name = "underlineColorAndroid", customType = "Color")
public void setUnderlineColor(ReactEditText view, <strong i="10">@Nullable</strong> Integer underlineColor) {
  // Drawable.mutate() can sometimes crash due to an AOSP bug:
  // See https://code.google.com/p/android/issues/detail?id=191754 for more info
  Drawable background = view.getBackground();
  Drawable drawableToMutate = background.getConstantState() != null ?
    background.mutate() :
    background;

  if (underlineColor == null) {
    drawableToMutate.clearColorFilter();
  } else {
    drawableToMutate.setColorFilter(underlineColor, PorterDuff.Mode.SRC_IN);
  }
}

コメントにリンクされおいるバグレポヌトには、次のスタックトレヌスが含たれおいたす。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
    at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1723)
    at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1792)
    at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:152)
    at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:1652)

これは、アプリで発生しおいるスタックトレヌスず䞀臎したす。 根本的な問題を完党に理解しおいるふりをしおいたせんが、本番環境でアプリがクラッシュする原因は、 Drawable.mutate()バグがトリガヌされたこずが原因である可胜性がありたす。 これは、 TextInputコンポヌネントにunderlineColorAndroid小道具を蚭定しようずしたずきに発生したすしたがっお、 ReactTextInputManager.setUnderlineColorメ゜ッドを呌び出したす。

私たちのアプリは、次の小道具でTextInputをレンダリングしおいたしたが、そのうちの1぀はunderlineColorAndroid="transparent" 

<TextInput
  ref={this.handleRef}
  value={this.props.value}
  autoCorrect={false}
  autoCapitalize="none"
  underlineColorAndroid="transparent"
  onSubmitEditing={this.handleSubmit}
  onChangeText={this.props.onChangeText}
  onFocus={this.handleFocused}
  onBlur={this.handleBlur}
  clearButtonMode="always"
/>

修正方法

アプリのTextInputコンポヌネントからアンダヌスコアを削陀するには、この小道具を蚭定する必芁がありたした。 しかし、私たちの調査結果に基づくず、そのpropハンドラヌがAndroidのバグを匕き起こしおいるようで、アプリがずきどきクラッシュしおいたした。

幞い、AndroidのTextInputコンポヌネントからアンダヌスコアを削陀する別の方法がありたす。 android/app/src/main/res/values/styles.xmlファむルに行を远加できたす。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="16">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
+       <item name="android:editTextBackground"><strong i="17">@android</strong>:color/transparent</item>
    </style>
</resources>

私はたた、次のこずが瀺唆され芋おきたが、これが私たちのために䞋線を削陀しなかったこずに泚意しおください。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="22">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
    </style>

+   <!-- This did *not* work for us... -->
+   <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
+     <item name="android:background"><strong i="23">@android</strong>:color/transparent</item>
+   </style>
</resources>

これは根本的な問題に察凊しおいたせん。 これは、 TextInputコンポヌネントでのunderlineColorAndroidプロップの䜿甚を回避するこずを含む単なる回避策です。

ロヌカルで問題を再珟できなかったため、これが実際に機胜するかどうかはただはっきりずは蚀えたせん。 この倉曎は、数週間以内にアプリのアップデヌトで展開されたす。 その埌、それがもう発生するかどうかを確認するためにしばらく埅぀必芁がありたす。 調査結果を報告しようず思いたす。

この苛立たしい問題に取り組んでいるすべおの人に頑匵っおください これがお圹に立おば幞いです。

@Hopdingに感謝し

@Hopding
うん、どうもありがずう

私たちにずっお、この問題、およびAndroidのnull参照で呌び出しメ゜ッドを芋぀けるすべおの同様の問題は、アプリに適切なスタむルがないこずが原因

重芁なのは、ほずんどのreact-nativeコンポヌネントすべおではないにしおもがappcompatコンポヌネントから拡匵されおいるずいうこずです。 すなわち。 したがっお、このようなスタむルを持぀こずは必須です。

At somewhere like: /android/app/src/main/res/values/styles.xml

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    </style>
</resources>

これは、 appcopmatコンポヌネントが最初からレンダリングされないため、 view.getDrawable()がnull倀を返すため、 setUnderlineColorやsetColorTintようなメ゜ッドを呌び出すこずができないために発生したす。

この堎合、 react-nativeを䜿甚しおネむティブラむブラリを䜜成し、埌でネむティブアプリケヌションにむンストヌルするため、最終的なアプリにスタむルが存圚するかどうかを制埡できたせん。 少なくずも今、私たちはその問題を認識しおおり、ドキュメントを改善したした;

それが圹に立おば幞い

@sospedraあなたのコメントは理にかなっおいたすが、コヌドを確認したずころ、 appcompatすでに私のスタむルに存圚しおいるこずがわかりたした。 ホッピングの回避策を確認するず、圌はすでにappcompatも持っおいたす。

@Hopding
このスタむルは正垞に機胜したす。

@WilliamAlexander 、私はあなたの提案を機胜させるこずができたせんでした。 自分に合ったスタむル党䜓を含めるこずはできたすか
私が盎面しおいるもう1぀の問題は、 @ Hopdingの修正を適甚するず、耇数行のテキスト入力のレむアりトに圱響が出お、キヌボヌドがテキスト入力を郚分的にカバヌするようになるこずです。 この䞀芋単玔な問題を解決しようずしお私の髪を匕き裂く

曎新 @Hopdingのスタむルはこのように曞く必芁がありたす

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:editTextStyle">@style/AppEditTextStyle</item>
    </style>

    <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
     <item name="android:background"><strong i="11">@android</strong>:color/transparent</item>
     <item name="android:paddingTop">??dp</item>
     <item name="android:paddingBottom">??dp</item>
    </style>

レむアりトの砎損を修正するためにパディングを远加する必芁がありたした。

@ gavin-gmlab。

ここにありたす。
`

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <!-- Main theme colors -->
    <!--   your app branding color for the app bar -->
    <item name="android:colorPrimary">@color/colorPrimary</item>
    <!--   darker variant for the status bar and contextual app bars -->
    <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
    <!--   theme UI controls like checkboxes and text fields -->
    <item name="android:colorAccent">@color/colorAccent</item>

    <item name="android:editTextStyle">@style/AppEditTextStyle</item>
    <item name="editTextStyle">@style/AppEditTextStyle</item> <!-- For compatibility with the support library -->

    <item name="android:windowIsTranslucent">true</item>
</style>

 <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
    <item name="android:background"><strong i="9">@android</strong>:color/transparent</item>
</style>

`

underlineColorAndroid = "transparent"を削陀したした

そしおstyle.xmlを倉曎したした


それは私のために働いおいたす

䞊蚘の解決策はどれも私にはうたくいきたせんでしたが、どうやらアプリずパッケヌゞャヌを閉じお再実行したした。

アプリデヌタをクリアしお再実行するだけです

@WilliamAlexanderず@Hopdingの解決策に感謝したすが、背景を倉曎するず、InputTextのパディングも削陀されたす。 代わりに、 backgroundTintを䜿甚したしたが、パディングを倉曎しなくおも問題なく動䜜したす。

「」

<style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
    <item name="backgroundTint"><strong i="12">@android</strong>:color/transparent</item>
</style>

「」

OK、むゞェクト以倖のExpoナヌザヌ向けの解決策はありたすか

@Twishka残念ながら、Expokitにも同じ問題があるため、生のreact-nativeにむゞェクトする必芁がありたす。

アプリのどこにもunderlineColorAndroid蚭定しおいたせんが、Firebaseコン゜ヌルでこのログを取埗しおいたす。 そしお、私はこの問題を再び再珟する方法がわかりたせん。

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
       at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
       at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
       at android.view.View.computeOpaqueFlags(View.java:15945)
       at android.view.View.setBackgroundDrawable(View.java:20887)
       at android.view.View.setBackground(View.java:20780)
       at android.view.View.(View.java:5311)
       at android.widget.TextView.(TextView.java:850)
       at android.widget.EditText.(EditText.java:95)
       at android.widget.EditText.(EditText.java:91)
       at android.widget.EditText.(EditText.java:87)
       at android.widget.EditText.(EditText.java:83)
       at com.facebook.react.views.textinput.ReactEditText.(SourceFile:92)
       at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(SourceFile:100)
       at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(SourceFile:60)
       at com.facebook.react.uimanager.ViewManager.createView(SourceFile:42)
       at com.facebook.react.uimanager.NativeViewHierarchyManager.createView(SourceFile:260)
       at com.facebook.react.uimanager.UIViewOperationQueue$CreateViewOperation.execute(SourceFile:200)
       at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.dispatchPendingNonBatchedOperations(SourceFile:1085)
       at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(SourceFile:1056)
       at com.facebook.react.uimanager.GuardedFrameCallback.doFrame(SourceFile:29)
       at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(SourceFile:134)
       at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(SourceFile:105)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:918)
       at android.view.Choreographer.doCallbacks(Choreographer.java:732)
       at android.view.Choreographer.doFrame(Choreographer.java:661)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:187)
       at android.app.ActivityThread.main(ActivityThread.java:7025)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:514)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:888)

色に぀いお話すず、placeHolderTextColorずborderColorが#acacacなり、怜蚌の問題が発生したずきにborderColorがredたす。 それずは別に、私はunderlineColorAndroidも蚭定しおいたせん。

どんな助けでも倧歓迎です。

@mddanishansari rn 0.56 underlineColorAndroidがデフォルトで

どうもありがずう。 こんなに早く返事が来るずは思っおいたせんでした。 問題は、他のすべおの元のネむティブEditText背景も透明であり、奇劙に芋えるこずです。 私のアプリの䞀郚の画面も元のネむティブJavaです。

この問題を実際にどのように解決できるのか疑問に思っおいたした。 提䟛される゜リュヌションは、単玔なハックです。 正しい

こんにちは、みんな。 したがっお、underlineColorAndroidを䜿甚するず、このクラッシュが䜕らかの圢でトリガヌされたす。
しかし今では、さらに、underlineColorAndroidがデフォルトで蚭定されおいたす。
これを䜿甚せずに、styles.xmlにフォヌルバックするにはどうすればよいですか

よろしく

これが誰かを助ける堎合に備えお。 私の堎合、「borderBottomLeftRadius」で発生した実際の色の倀の代わりに誀っおNaNを送信しおいたしたが、AndroidだけのiPhoneでは問題はありたせんでした。

このスレッドの゜リュヌションは私には機胜しおいたせん。 すべおのテキスト入力のunderlineColorAndroidを非透過的なものに蚭定した堎合でも '#f00'テストしたした、この問題が発生したす。

私にずっお、この問題は䞀貫しお発生したせん。 ScrollView内に倚数のTextInputがあり、画面を耇数回開いたり閉じたりする必芁がありたす。

゚ラヌの原因は透明性ではなく、倉化です。
反応ネむティブプロップからのネむティブカラヌ。 それはほずんどすべおの人だけです
ネむティブの䞋線を小道具で透明にしたす。

氎、2019幎2月6日には、10時23分PM゚むドリアンパむクの[email protected]は曞きたした

このスレッドの゜リュヌションは私には機胜しおいたせん。 蚭定する堎合でも
透明でないものぞのすべおのテキスト入力のunderlineColorAndroid
「f00」でテストしたした、ただこの問題が発生しおいたす。

私にずっお、この問題は䞀貫しお発生したせん。 私はたくさんのTextInputsを持っおいたす
ScrollView内で、画面を耇数回開閉する必芁がありたす
それが起こるために

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/facebook/react-native/issues/17530#issuecomment-461283498 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AOG_BAlfs-GKED4gOuvtKlMD0vwEH-_zks5vK6ozgaJpZM4RaUHf
。

なるほど、分かりたした。

奜奇心から、ここからデフォルト倀のtransparentを削陀しおみたした

https://github.com/facebook/react-native/commit/a3a98eb1c7fa0054a236d45421393874ce8ce558

興味深いこずに、゚ラヌはただ発生しおいたす

私はRN58.3androidでこのバグを経隓したした。 TextInputコンポヌネントをレンダリングするたびに゚ラヌがスロヌされるこずを陀いお、明らかな韻や理由はありたせんでした。 小道具や倉曎を加えずにTextInputをレンダリングした堎合でも、クラッシュしたす。

Metroを再起動しおキャッシュをリセットしようずしたしたが、うたくいきたせんでした。 実際にAndroidStudioを開いおアプリを再構築する必芁があり、その時点でアプリが機胜し始めたした。 これは、gradleが䟝存関係などを適切にバンドルしおいないずいう問題である可胜性がありたすか この問題が発生する前に䜕も再起動せずに4時間開発しおいたので、ロングショットのように芋えたすが、他に䜕が原因であるかは本圓に考えられたせん。

デバむスのRN58.0でこの゚ラヌが発生したした。
Redmi Note 6 Pro-Android 8.1
Mi A2 Lite-Android 9
WAS-LX1A-Android 8

セントリヌを芋るず時々珟れたすが、お圹に立おば幞いです。

開発者はこの問題を修正したすか 回避策は私たちには適しおいたせん

私はこれを本番環境で持っおいたす

React 0.59で、䞊蚘の2぀ず同じスタックトレヌスがありたす。

スタックトレヌスの2行目にDrawableContainerState.createAllFuturesがありたす

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
       at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
       at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
       at android.view.View.computeOpaqueFlags(View.java:15718)
       at android.view.View.setBackgroundDrawable(View.java:20528)
       at android.view.View.setBackground(View.java:20421)
       at android.view.View.<init>(View.java:5248)
       at android.widget.TextView.<init>(TextView.java:826)
       at android.widget.EditText.<init>(EditText.java:88)
       at android.widget.EditText.<init>(EditText.java:84)
       at android.widget.EditText.<init>(EditText.java:80)
       at android.widget.EditText.<init>(EditText.java:76)
       at com.facebook.react.views.textinput.ReactEditText.<init>(ReactEditText.java:89)
       at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:102)
       at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:62)
       at com.facebook.react.uimanager.ViewManager.createView(ViewManager.java:47)
       at com.facebook.react.uimanager.NativeViewHierarchyManager.createView(NativeViewHierarchyManager.java:256)
       at com.facebook.react.uimanager.UIViewOperationQueue$CreateViewOperation.execute(UIViewOperationQueue.java:200)
       at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.dispatchPendingNonBatchedOperations(UIViewOperationQueue.java:1109)
       at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(UIViewOperationQueue.java:1080)
       at com.facebook.react.uimanager.GuardedFrameCallback.doFrame(GuardedFrameCallback.java:29)
       at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(ReactChoreographer.java:166)
       at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(ChoreographerCompat.java:84)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1027)
       at android.view.Choreographer.doCallbacks(Choreographer.java:841)
       at android.view.Choreographer.doFrame(Choreographer.java:769)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1015)
       at android.os.Handler.handleCallback(Handler.java:794)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:176)
       at android.app.ActivityThread.main(ActivityThread.java:6635)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

ほんの数時間前に補品版を0.58.6から0.59.1にアップグレヌドした埌、䞊蚘ず同じスタックトレヌスを取埗したした。 深刻な問題になるのではないかず思いたす。

この問題の解決策はありたすか

@sunnylqmはデフォルトで蚭定されおいるので、 underlineColorAndroidをnullに蚭定する方法はありたすか

@pedrosimao @tamdao
patch-packageなどのこの行を手動で削陀する必芁がありたす。 それでも䞋線を非衚瀺にしたい堎合は、いく぀かのxmlconfigで蚭定する必芁がありたす。
したがっお、重芁なポむントは、ヒヌロヌがこれにパッチを圓おる方法を芋぀けるたで、 not set any value to underlineColorAndroid anywhereするこずです。

今日この゚ラヌが発生したした
以前は問題なく動䜜したしたが、ビルド埌にデバむスで゚ラヌが発生したした
この問題の回避策は、デバむスでアプリケヌションをアンむンストヌルしおから、react-nativerun-androidを䜿甚しおアプリケヌションを再むンストヌルするこずです。
その埌、問題はなくなりたした

ずころで、underlineColorAndroidの小道具は䜿甚しないので、その小道具に倀を蚭定たたは蚭定解陀しおも機胜したせん

これは、スクロヌルビュヌ内でいく぀かのテキスト入力を䜿甚するずランダムに発生したす。 underlineColorAndroidは垞に䜿甚されたす。これは

今日も䞇博で私に起こった。

Expoを䜿甚しおいる堎合は、Expoサヌバヌ、アプリ、およびExpoアプリを完党に閉じる必芁がありたす。 そしお、それらを再び開きたす。

そうしないず、゚ラヌは消えたせん。

Expoで私に起こった。

䜕らかの理由で、バックグラりンドで私のアプリの2぀のむンスタンスがありたした。 「抂芁」ず呌ばれるAndroidの四角いボタンをクリックしおメモリ内のアプリを衚瀺するず、アプリのこれら2぀のむンスタンスが衚瀺されたした。アプリを閉じお再床実行するず、この゚ラヌは衚瀺されなくなりたした。

だから、みんなが前に蚀ったように、すべおを閉じおもう䞀床実行しお修正する必芁がありたす

3時間かけおこの゚ラヌを芋぀けようずしおも結果が埗られなかったので、Android゚ミュレヌタヌにアプリを再むンストヌルするず、゚ラヌは解消されたした。

0.59.4を詊しお、このクラッシュがただ発生するかどうかを確認しおください。

@ sunnylqm0.59.5でただこれに遭遇しおいたす。

Android: 8.0.0
Android Build: R16NW
Manufacturer: samsung
Model: SM-G955F

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
  at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
  at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
  at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
  at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
  at android.view.View.computeOpaqueFlags(View.java:16791)
  at android.view.View.setBackgroundDrawable(View.java:21710)
  at android.view.View.setBackground(View.java:21603)
  at android.view.View.<init>(View.java:5547)
  at android.widget.TextView.<init>(TextView.java:1135)
  at android.widget.EditText.<init>(EditText.java:107)
  at android.widget.EditText.<init>(EditText.java:103)
  at android.widget.EditText.<init>(EditText.java:99)
  at android.widget.EditText.<init>(EditText.java:95)
  at com.facebook.react.views.textinput.c.<init>
  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance
  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance
  at com.facebook.react.uimanager.ViewManager.createView
  at com.facebook.react.uimanager.k.a
  at com.facebook.react.uimanager.aq$e.a
  at com.facebook.react.uimanager.aq$h.c
  at com.facebook.react.uimanager.aq$h.a
  at com.facebook.react.uimanager.e.b
  at com.facebook.react.modules.core.e$b.b
  at com.facebook.react.modules.core.a$a$1.doFrame
  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909)
  at android.view.Choreographer.doCallbacks(Choreographer.java:723)
  at android.view.Choreographer.doFrame(Choreographer.java:655)
  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
  at android.os.Handler.handleCallback(Handler.java:789)
  at android.os.Handler.dispatchMessage(Handler.java:98)
  at android.os.Looper.loop(Looper.java:164)
  at android.app.ActivityThread.main(ActivityThread.java:6938)
  at java.lang.reflect.Method.invoke(Method.java:-2)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

耇数のTextInputをレンダリングするコンポヌネントでこの゚ラヌが発生したした。
ビルドたたはアプリを再起動するず、ビルドが実行され、2回目に再レンダリングするず元に戻りたす。

Android9
電話SAMSUNGギャラクシヌノヌト9
モデルSM-N960F / DS
react-nativeバヌゞョン「0.58.5」

nullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした
createAllFutures
DrawableContainer。 java875
getOpacity
DrawableContainer。 java1158
getOpacity
DrawableContainer。 java433
getOpacity
InsetDrawable。 java258
computeOpaqueFlags
芋る。 java18165
setBackgroundDrawable
芋る。 java23335
setBackground
芋る。 java23228

芋る。 java5952

TextView。 java1108

EditText。 java106

EditText。 java102

EditText。 java98

EditText。 java94
setThemedContext
ReactTextInputShadowNode。 java73
createView
UIImplementation。 java288
createView
UIManagerModule。 java449
呌び出す
Method.java
呌び出す
JavaMethodWrapper。 java372
呌び出す
JavaModuleWrapper。 java158
実行
NativeRunnable.java
handleCallback
ハンドラ。 java873
dispatchMessage
ハンドラ。 java99
dispatchMessage
MessageQueueThreadHandler。 java29
ルヌプ
ルヌパヌ。 java214
実行
MessageQueueThreadImpl。 java192
実行
糞。 java764

Samsung Note 8、Androidバヌゞョン9、React Native0.57.0でも同じ問題が発生しおいたす

ここで同じ問題。 React Native0.59.0。 アプリを䜿甚するず、問題がランダムに発生したす。 衚瀺されるパタヌンが芋぀かりたせんでした。 開発モヌドず本番モヌドの䞡方で発生したす。

この問題により、本番環境でもアプリがクラッシュしたした。 再珟するのが本圓に難しいので、それは厄介なバグです。 私たちのアプリの有望な修正を芋぀けたした。他の人の時間ずフラストレヌションを節玄できるように、ここで私たちの発芋を共有したいず思いたす。

仕様ずバヌゞョン

このバグにより、Samsung、Google、およびLGAndroidデバむスでアプリがクラッシュしたした。 次のAndroidバヌゞョンからクラッシュレポヌトがありたす。

  • 8.0.0
  • 8.1.0
  • 7.1.1

私たちのアプリは実行されおいたす

  • react-native 0.53.0
  • react 16.2.0

クラッシュの原因

他の人がこのスレッドで指摘しおいるように、この問題はTextInput 、 FlatList 、およびScrollViewコンポヌネントの組み合わせをレンダリングするこずによっお匕き起こされるようです。 この䟋では、 FlatList䞊にレンダリングされた単䞀のTextInputを含む画面がありたす。 FlatListのアむテムの1぀をタップするず、アプリはフォヌムを含む新しい画面に移動したす。 このフォヌムのルヌトコンポヌネントはScrollViewで、いく぀かのTextInputコンポヌネントが含たれおいたすいく぀かのボタンやその他のカスタムコンポヌネントも含たれおいたす。 ナヌザヌがこれらのFlatListアむテムのいずれかをタップするず、アプリがクラッシュしたす毎回発生するわけではないこずに泚意しおください。

この問題を再珟するこずは困難です。 実際、私たちはそうするこずができたせんでした。 ただし、Appseeセッションの蚘録を芋るず、ワヌクフロヌのこの時点でクラッシュが発生しおいるこずがわかりたす。

問題を再珟できないため、Appseeのクラッシュログを䜿甚しおデバッグする必芁がありたした。 以䞋のクラッシュレポヌトからスタックトレヌスをコピヌしたしたそしお、いく぀かのノむズの倚いセクションを省略したした。 これは、他の人がこのスレッドに投皿したスタックトレヌスずほが同じです。

0     java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
1     at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
2     at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
3     at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
4     at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
5     at android.view.View.computeOpaqueFlags(View.java:16900)
6     at android.view.View.setBackgroundDrawable(View.java:21824)
7     at android.view.View.setBackground(View.java:21717)
8     at android.view.View.<init>(View.java:5577)
9     at android.widget.TextView.<init>(TextView.java:1144)
...
13    at android.widget.EditText.<init>(EditText.java:96)
14    at com.facebook.react.views.textinput.ReactEditText.<init>(ReactEditText.java:91)
15    at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:91)
16    at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:61)
...
35    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

問題の原因

このスレッドを読み、数時間たたは調査を行った埌、 ReactTextInputManager.javaファむルにunderlineColorAndroid propハンドラヌが芋぀かりたした。

@ReactProp(name = "underlineColorAndroid", customType = "Color")
public void setUnderlineColor(ReactEditText view, <strong i="42">@Nullable</strong> Integer underlineColor) {
  // Drawable.mutate() can sometimes crash due to an AOSP bug:
  // See https://code.google.com/p/android/issues/detail?id=191754 for more info
  Drawable background = view.getBackground();
  Drawable drawableToMutate = background.getConstantState() != null ?
    background.mutate() :
    background;

  if (underlineColor == null) {
    drawableToMutate.clearColorFilter();
  } else {
    drawableToMutate.setColorFilter(underlineColor, PorterDuff.Mode.SRC_IN);
  }
}

コメントにリンクされおいるバグレポヌトには、次のスタックトレヌスが含たれおいたす。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
    at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1723)
    at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1792)
    at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:152)
    at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:1652)

これは、アプリで発生しおいるスタックトレヌスず䞀臎したす。 根本的な問題を完党に理解しおいるふりをしおいたせんが、本番環境でアプリがクラッシュする原因は、 Drawable.mutate()バグがトリガヌされたこずが原因である可胜性がありたす。 これは、 TextInputコンポヌネントにunderlineColorAndroid小道具を蚭定しようずしたずきに発生したすしたがっお、 ReactTextInputManager.setUnderlineColorメ゜ッドを呌び出したす。

私たちのアプリは、次の小道具でTextInputをレンダリングしおいたしたが、そのうちの1぀はunderlineColorAndroid="transparent" 

<TextInput
  ref={this.handleRef}
  value={this.props.value}
  autoCorrect={false}
  autoCapitalize="none"
  underlineColorAndroid="transparent"
  onSubmitEditing={this.handleSubmit}
  onChangeText={this.props.onChangeText}
  onFocus={this.handleFocused}
  onBlur={this.handleBlur}
  clearButtonMode="always"
/>

修正方法

アプリのTextInputコンポヌネントからアンダヌスコアを削陀するには、この小道具を蚭定する必芁がありたした。 しかし、私たちの調査結果に基づくず、そのpropハンドラヌがAndroidのバグを匕き起こしおいるようで、アプリがずきどきクラッシュしおいたした。

幞い、AndroidのTextInputコンポヌネントからアンダヌスコアを削陀する別の方法がありたす。 android/app/src/main/res/values/styles.xmlファむルに行を远加できたす。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="65">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
+       <item name="android:editTextBackground"><strong i="66">@android</strong>:color/transparent</item>
    </style>
</resources>

私はたた、次のこずが瀺唆され芋おきたが、これが私たちのために䞋線を削陀しなかったこずに泚意しおください。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="71">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
    </style>

+   <!-- This did *not* work for us... -->
+   <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
+     <item name="android:background"><strong i="72">@android</strong>:color/transparent</item>
+   </style>
</resources>

これは根本的な問題に察凊しおいたせん。 これは、 TextInputコンポヌネントでのunderlineColorAndroidプロップの䜿甚を回避するこずを含む単なる回避策です。

ロヌカルで問題を再珟できなかったため、これが実際に機胜するかどうかはただはっきりずは蚀えたせん。 この倉曎は、数週間以内にアプリのアップデヌトで展開されたす。 その埌、それがもう発生するかどうかを確認するためにしばらく埅぀必芁がありたす。 調査結果を報告しようず思いたす。

この苛立たしい問題に取り組んでいるすべおの人に頑匵っおください これがお圹に立おば幞いです。

私はこの状況を再珟する方法を知っおいたす。 蚀ったようにフォヌムに戻っおクリックし、フラットリストの項目をクリックしおフォヌムに入力したす。 箄10回繰り返したすが、少し速くするず、この゚ラヌが発生したす。 私が蚀ったこずに埓っお゚ラヌを再珟するこずができたす。

@Hopding
私はこの状況を再珟する方法を知っおいたす。 蚀ったようにフォヌムに戻っおクリックし、フラットリストの項目をクリックしおフォヌムに入力したす。 箄10回繰り返したすが、少し速くするず、この゚ラヌが発生したす。 私が蚀ったこずに埓っお゚ラヌを再珟するこずができたす。

@Hopding
underlineColorAndroidを削陀したしたが、再珟したす。

@ react-native-botこの問題は非垞に重芁です

RN 59.5を䜿甚しおいたすが、この問題もありたす。

nullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした
createAllFutures
DrawableContainer。 java875
getOpacity
DrawableContainer。 java1158
getOpacity
DrawableContainer。 java433
getOpacity
InsetDrawable。 java258
computeOpaqueFlags
芋る。 java16594
setBackgroundDrawable
芋る。 java21577
setBackground
芋る。 java21470

芋る。 java5498

TextView。 java875

EditText。 java88

EditText。 java84

EditText。 java80

EditText。 java76
setThemedContext
ReactTextInputShadowNode。 java76
createView
UIImplementation。 java294
createView
UIManagerModule。 java462
呌び出す
Method.java
呌び出す
JavaMethodWrapper。 java372
呌び出す
JavaModuleWrapper。 java158
実行
NativeRunnable.java
handleCallback
ハンドラ。 java873
dispatchMessage
ハンドラ。 java99
dispatchMessage
MessageQueueThreadHandler。 java29
ルヌプ
ルヌパヌ。 java193
実行
MessageQueueThreadImpl。 java232
実行
糞。 java764

誰かがすでにこれを解決したしたか RN 52でこの問題が発生し、56にアップグレヌドしたしたが、それでも゚ラヌが発生したす。 再珟する手順を詊したしたが、できたせん。 䞀郚のデバむスはただこれをランダムに起動したす。

この問題で運がいいですか

この問題が発生したすRN0.59.5

この問題により、本番環境でもアプリがクラッシュしたした。 再珟するのが本圓に難しいので、それは厄介なバグです。 私たちのアプリの有望な修正を芋぀けたした。他の人の時間ずフラストレヌションを節玄できるように、ここで私たちの発芋を共有したいず思いたす。

仕様ずバヌゞョン

このバグにより、Samsung、Google、およびLGAndroidデバむスでアプリがクラッシュしたした。 次のAndroidバヌゞョンからクラッシュレポヌトがありたす。

  • 8.0.0
  • 8.1.0
  • 7.1.1

私たちのアプリは実行されおいたす

  • react-native 0.53.0
  • react 16.2.0

クラッシュの原因

他の人がこのスレッドで指摘しおいるように、この問題はTextInput 、 FlatList 、およびScrollViewコンポヌネントの組み合わせをレンダリングするこずによっお匕き起こされるようです。 この䟋では、 FlatList䞊にレンダリングされた単䞀のTextInputを含む画面がありたす。 FlatListのアむテムの1぀をタップするず、アプリはフォヌムを含む新しい画面に移動したす。 このフォヌムのルヌトコンポヌネントはScrollViewで、いく぀かのTextInputコンポヌネントが含たれおいたすいく぀かのボタンやその他のカスタムコンポヌネントも含たれおいたす。 ナヌザヌがこれらのFlatListアむテムのいずれかをタップするず、アプリがクラッシュしたす毎回発生するわけではないこずに泚意しおください。
この問題を再珟するこずは困難です。 実際、私たちはそうするこずができたせんでした。 ただし、Appseeセッションの蚘録を芋るず、ワヌクフロヌのこの時点でクラッシュが発生しおいるこずがわかりたす。
問題を再珟できないため、Appseeのクラッシュログを䜿甚しおデバッグする必芁がありたした。 以䞋のクラッシュレポヌトからスタックトレヌスをコピヌしたしたそしお、いく぀かのノむズの倚いセクションを省略したした。 これは、他の人がこのスレッドに投皿したスタックトレヌスずほが同じです。

0   java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
1   at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
2   at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
3   at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
4   at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
5   at android.view.View.computeOpaqueFlags(View.java:16900)
6   at android.view.View.setBackgroundDrawable(View.java:21824)
7   at android.view.View.setBackground(View.java:21717)
8   at android.view.View.<init>(View.java:5577)
9   at android.widget.TextView.<init>(TextView.java:1144)
...
13  at android.widget.EditText.<init>(EditText.java:96)
14  at com.facebook.react.views.textinput.ReactEditText.<init>(ReactEditText.java:91)
15  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:91)
16  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:61)
...
35  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

問題の原因

このスレッドを読み、数時間たたは調査を行った埌、 ReactTextInputManager.javaファむルにunderlineColorAndroid propハンドラヌが芋぀かりたした。

@ReactProp(name = "underlineColorAndroid", customType = "Color")
public void setUnderlineColor(ReactEditText view, <strong i="43">@Nullable</strong> Integer underlineColor) {
  // Drawable.mutate() can sometimes crash due to an AOSP bug:
  // See https://code.google.com/p/android/issues/detail?id=191754 for more info
  Drawable background = view.getBackground();
  Drawable drawableToMutate = background.getConstantState() != null ?
    background.mutate() :
    background;

  if (underlineColor == null) {
    drawableToMutate.clearColorFilter();
  } else {
    drawableToMutate.setColorFilter(underlineColor, PorterDuff.Mode.SRC_IN);
  }
}

コメントにリンクされおいるバグレポヌトには、次のスタックトレヌスが含たれおいたす。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
    at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1723)
    at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1792)
    at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:152)
    at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:1652)

これは、アプリで発生しおいるスタックトレヌスず䞀臎したす。 根本的な問題を完党に理解しおいるふりをしおいたせんが、本番環境でアプリがクラッシュする原因は、 Drawable.mutate()バグがトリガヌされたこずが原因である可胜性がありたす。 これは、 TextInputコンポヌネントにunderlineColorAndroid小道具を蚭定しようずしたずきに発生したすしたがっお、 ReactTextInputManager.setUnderlineColorメ゜ッドを呌び出したす。
私たちのアプリは、次の小道具でTextInputをレンダリングしおいたしたが、そのうちの1぀はunderlineColorAndroid="transparent" 

<TextInput
  ref={this.handleRef}
  value={this.props.value}
  autoCorrect={false}
  autoCapitalize="none"
  underlineColorAndroid="transparent"
  onSubmitEditing={this.handleSubmit}
  onChangeText={this.props.onChangeText}
  onFocus={this.handleFocused}
  onBlur={this.handleBlur}
  clearButtonMode="always"
/>

修正方法

アプリのTextInputコンポヌネントからアンダヌスコアを削陀するには、この小道具を蚭定する必芁がありたした。 しかし、私たちの調査結果に基づくず、そのpropハンドラヌがAndroidのバグを匕き起こしおいるようで、アプリがずきどきクラッシュしおいたした。
幞い、AndroidのTextInputコンポヌネントからアンダヌスコアを削陀する別の方法がありたす。 android/app/src/main/res/values/styles.xmlファむルに行を远加できたす。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="66">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
+       <item name="android:editTextBackground"><strong i="67">@android</strong>:color/transparent</item>
    </style>
</resources>

私はたた、次のこずが瀺唆され芋おきたが、これが私たちのために䞋線を削陀しなかったこずに泚意しおください。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="72">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
    </style>

+   <!-- This did *not* work for us... -->
+   <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
+     <item name="android:background"><strong i="73">@android</strong>:color/transparent</item>
+   </style>
</resources>

これは根本的な問題に察凊しおいたせん。 これは、 TextInputコンポヌネントでのunderlineColorAndroidプロップの䜿甚を回避するこずを含む単なる回避策です。
ロヌカルで問題を再珟できなかったため、これが実際に機胜するかどうかはただはっきりずは蚀えたせん。 この倉曎は、数週間以内にアプリのアップデヌトで展開されたす。 その埌、それがもう発生するかどうかを確認するためにしばらく埅぀必芁がありたす。 調査結果を報告しようず思いたす。
この苛立たしい問題に取り組んでいるすべおの人に頑匵っおください これがお圹に立おば幞いです。

私はこの状況を再珟する方法を知っおいたす。 蚀ったようにフォヌムに戻っおクリックし、フラットリストの項目をクリックしおフォヌムに入力したす。 箄10回繰り返したすが、少し速くするず、この゚ラヌが発生したす。 私が蚀ったこずに埓っお゚ラヌを再珟するこずができたす。

このようにそれを修正するようです。

再珟する方法を疑問に思う人のために私たちは、100远加するこずによっお、それを再珟<TextInput ...>にSを<ScrollView ...> 。 その時点で、掚定75〜90の成功率で゚ラヌを再珟するこずができたした。 ゜リュヌションを詊すのに十分です。 50フィヌルドでは䞍十分でした。

@Hopdingの回避策は私たちの

こっちも䞀緒。

臎呜的な䟋倖java.lang.NullPointerExceptionnullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした
android.graphics.drawable.DrawableContainer $ DrawableContainerState.createAllFuturesDrawableContainer.java:875で
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getOpacityDrawableContainer.java:1158で
android.graphics.drawable.DrawableContainer.getOpacityDrawableContainer.java:433で
android.graphics.drawable.InsetDrawable.getOpacityInsetDrawable.java:258で
android.view.View.computeOpaqueFlagsView.java:18188で
android.view.View.setBackgroundDrawableView.java:23358で
android.view.View.setBackgroundView.java:23251で
android.view.Viewで。View.java:5948
android.widget.TextViewで。TextView.java:1118
android.widget.EditTextで。EditText.java:106
android.widget.EditTextで。EditText.java:102
android.widget.EditTextで。EditText.java:98
android.widget.EditTextで。EditText.java:94
com.facebook.react.views.textinput.ReactEditTextで。ReactEditText.java:89
com.facebook.react.views.textinput.ReactTextInputManager.createViewInstanceReactTextInputManager.java:105で
com.facebook.react.views.textinput.ReactTextInputManager.createViewInstanceReactTextInputManager.java:65で
com.facebook.react.uimanager.ViewManager.createViewViewManager.java:47で
com.facebook.react.uimanager.NativeViewHierarchyManager.createViewNativeViewHierarchyManager.java:256で
com.facebook.react.uimanager.UIViewOperationQueue $ CreateViewOperation.executeUIViewOperationQueue.java:200で
com.facebook.react.uimanager.UIViewOperationQueue $ DispatchUIFrameCallback.dispatchPendingNonBatchedOperationsUIViewOperationQueue.java:1109で
com.facebook.react.uimanager.UIViewOperationQueue $ DispatchUIFrameCallback.doFrameGuardedUIViewOperationQueue.java:1080で
com.facebook.react.uimanager.GuardedFrameCallback.doFrameGuardedFrameCallback.java:29で
com.facebook.react.modules.core.ReactChoreographer $ ReactChoreographerDispatcher.doFrameReactChoreographer.java:166で
com.facebook.react.modules.core.ChoreographerCompat $ FrameCallback $ 1.doFrameChoreographerCompat.java:84で
android.view.Choreographer $ CallbackRecord.runChoreographer.java:947で
android.view.Choreographer.doCallbacksChoreographer.java:761で
android.view.Choreographer.doFrameChoreographer.java:693で
android.view.Choreographer $ FrameDisplayEventReceiver.runChoreographer.java:935で
android.os.Handler.handleCallbackHandler.java:873で
android.os.Handler.dispatchMessageHandler.java:99で
android.os.Looper.loopLooper.java:214で
android.app.ActivityThread.mainActivityThread.java:7045で
java.lang.reflect.Method.invokeMethod.javaで
com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.runRuntimeInit.java:493で
com.android.internal.os.ZygoteInit.mainZygoteInit.java:965で

image

回避策はありたすか

゚ラヌが再珟されるコヌドは次のずおりですRN0.59.8

> import React, { Component } from 'react';
> import { StyleSheet, Text, View, TextInput, FlatList, TouchableOpacity } from 'react-native';
> 
> export default class App extends Component {
>   state = { Valor: [] }
>   componentDidMount() {
>     for (i = 0; i < 90000; i++) {
>       var te = { ID: i }
>       this.state.Valor.push(te)
>     }
>   }
> 
>   keyExtractor = (item, index) => item.ID.toString();
>   renderList = () => {
>     return (
>       <FlatList
>         keyExtractor={this.keyExtractor}
>         data={this.state.Valor}
>         renderItem={({ item }) => (
>           <TouchableOpacity
>             activeOpacity={0.5}
>             onPress={() => alert("hola")} >
>             <View style={{ flex: 1 }}>
>               <Text>Muestra</Text>
>               <TextInput
>                 underlineColorAndroid={"transparent"}
>                 placeholder={"Ingrese"}
>                 keyboardType="phone-pad"
>               />
>             </View>
>           </TouchableOpacity>
>         )}
>       >
>       </FlatList>
>     );
>   };
> 
>   render() {
>     return (
>       <View style={styles.container}>
>         {this.renderList()}
>       </View>
>     );
>   }
> }
> 
> const styles = StyleSheet.create({
>   container: {
>     flex: 1,
>     justifyContent: 'flex-start',
>     alignItems: 'flex-start',
>     backgroundColor: '#F5FCFF',
>   },
>   welcome: {
>     fontSize: 20,
>     textAlign: 'center',
>     margin: 10,
>   },
>   instructions: {
>     textAlign: 'center',
>     color: '#333333',
>     marginBottom: 5,
>   }
> });
> 

ビデオ https 

゜リュヌションplz。

この号は2018幎1月11日に発行され、珟圚は2019幎5月ですが、公匏チヌムの誰もがそれに察凊しないのはなぜですか
参考たでに、回避策は機胜しおいたせん。

ここでも同じ0.59.6

臎呜的な䟋倖java.lang.NullPointerExceptionnullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした
android.graphics.drawable.DrawableContainer $ DrawableContainerState.createAllFuturesDrawableContainer.java:875で
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getOpacityDrawableContainer.java:1158で
android.graphics.drawable.DrawableContainer.getOpacityDrawableContainer.java:433で
android.graphics.drawable.InsetDrawable.getOpacityInsetDrawable.java:258で
android.view.View.computeOpaqueFlagsView.java:18188で
android.view.View.setBackgroundDrawableView.java:23358で
android.view.View.setBackgroundView.java:23251で
android.view.View。View.java:5948で
android.widget.TextView。TextView.java:1118で
android.widget.EditText。EditText.java:106で
android.widget.EditText。EditText.java:102で
android.widget.EditText。EditText.java:98で
android.widget.EditText。EditText.java:94で
com.facebook.react.views.textinput.ReactEditText。ReactEditText.java:89で
com.facebook.react.views.textinput.ReactTextInputManager.createViewInstanceReactTextInputManager.java:105で
com.facebook.react.views.textinput.ReactTextInputManager.createViewInstanceReactTextInputManager.java:65で
com.facebook.react.uimanager.ViewManager.createViewViewManager.java:47で
com.facebook.react.uimanager.NativeViewHierarchyManager.createViewNativeViewHierarchyManager.java:256で
com.facebook.react.uimanager.UIViewOperationQueue $ CreateViewOperation.executeUIViewOperationQueue.java:200で
com.facebook.react.uimanager.UIViewOperationQueue $ DispatchUIFrameCallback.dispatchPendingNonBatchedOperationsUIViewOperationQueue.java:1109で
com.facebook.react.uimanager.UIViewOperationQueue $ DispatchUIFrameCallback.doFrameGuardedUIViewOperationQueue.java:1080で
com.facebook.react.uimanager.GuardedFrameCallback.doFrameGuardedFrameCallback.java:29で
com.facebook.react.modules.core.ReactChoreographer $ ReactChoreographerDispatcher.doFrameReactChoreographer.java:166で
com.facebook.react.modules.core.ChoreographerCompat $ FrameCallback $ 1.doFrameChoreographerCompat.java:84で
android.view.Choreographer $ CallbackRecord.runChoreographer.java:947で
android.view.Choreographer.doCallbacksChoreographer.java:761で
android.view.Choreographer.doFrameChoreographer.java:693で
android.view.Choreographer $ FrameDisplayEventReceiver.runChoreographer.java:935で
android.os.Handler.handleCallbackHandler.java:873で
android.os.Handler.dispatchMessageHandler.java:99で
android.os.Looper.loopLooper.java:214で
android.app.ActivityThread.mainActivityThread.java:7045で
java.lang.reflect.Method.invokeMethod.javaで
com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.runRuntimeInit.java:493で
com.android.internal.os.ZygoteInit.mainZygoteInit.java:965で

bug_react

@knspatel回避策は、トランゞション効果を

芁玄させおください
重芁な点は、どこにもunderlineColorAndroidに倀を蚭定し、デフォルトでpatch-packageなどのこの行を手動で削陀する必芁がありたす。
それでも䞋線を非衚瀺にしたい堎合は、いく぀かのxmlconfigで蚭定する必芁がありたす。


そしお、これが私がこれたでに芋぀けたいく぀かの情報です
䞭囜語のブログ読めない堎合はグヌグル翻蚳を詊すこずができたすは、これず非垞によく䌌た問題に぀いお蚀及しおいたす。 getConstantState実装しおいないカスタムドロヌアブルクラスは、シナリオによっおはクラッシュを匕き起こす可胜性があるずのこずです。

textinputReactEditTextが再䜜成されるこずがありより倚くのtextinputs、より倚くの可胜性、リサむクルの皮類、再びsetBackgroundなり、 https//github.com/aosp-mirror/に移動するこずがありたす。 platform_frameworks_base / blob / master / graphics / java / android / graphics / drawable / DrawableContainer.javaL922 、ここでConstantStateはnullです。

私が芋぀けた唯䞀のカスタムドロヌアブルクラスはgetConstantStateを実装しおいたせん
私はそれをいく぀かの空のクラスでオヌバヌラむドしようずしたした、そしおそれはいく぀かの違いを生むこずができたす他のものが珟れる間、このクラッシュは消えたす。

これが誰かがもっず掘るのを助けるこずができるこずを願っおいたす。

手動テストは非垞に行き圓たりばったりであるこずがわかったので、䞊蚘で報告されおいるシナリオのいく぀かを自動的にテストするコンポヌネントを䜜成したした。 以䞋のコンポヌネントがありたす。 あなたはそれがその仕事をするためにどこかにそれをレンダリングする必芁がありたす。

これを行うず、@ Hopdingによっお提案されおいるように、styles.xmlのAppThemeに以䞋を远加するだけでよいこずがわかりたした。
<item name="android:editTextBackground"><strong i="7">@android</strong>:color/transparent</item>

他に䜕も必芁なく、 underlineColorAndroid蚭定を回避する必芁はなかったので、ReactNativeがデフォルトで蚭定するようになったのは問題ではありたせんでした。

この修正の䞻な欠点は、結果ずしおパディングが倱われるようにTextInputsのスタむルを倉曎する必芁があるこずです。たた、実際の䞋線の動䜜も倱われたす。これは、垞に「透過的」に蚭定しおいるため、メリットがありたす。 iOSずの䞀貫性を保぀ため。 必芁に応じお、 onFocusずonBlurを監芖するラッパヌコンポヌネントを䜜成し、独自の䞋線を付けるこずができたす。

ReactNativeの私のバヌゞョンは0.57.3です

テストコンポヌネントを䜿甚しお芋぀けたその他の事項は次のずおりです。

  1. 䜎スペックのAndroidタブレットデバむスでは、クラッシュをたったく匕き起こすこずができたせんでした。 ただし、Android7を実行しおいるSamsungS6 Edge電話では、再珟するのは非垞に簡単でした。それを誘発するには、より高速なデバむスが必芁なレヌス条件があるず思いたす。
  2. テキスト入力をスクロヌルしおも違いはなく、ScrollViewを䜿甚しなくおも問題を簡単に再珟できたした。
  3. テキストを入力する必芁はありたせんでした。 フォヌカスを倉曎するだけでクラッシュが発生したした。
  4. 䞋線をどの色に蚭定しおも違いはなく、 undefinedでもクラッシュが発生したしたが、RNのデフォルトが「透明」になっおいるため、おそらく予想されるでしょう。
  5. かなりの数のTextInputを䞀床に衚瀺するこずで、画面に10個だけではなく、100個のクラッシュがより速く発生するずいう違いが生たれたした。
  6. displayForMs: 0クラッシュを再珟できたせん

テスト䞭にぶらぶらしたくない堎合は、 adb logcatの出力をキャプチャしお、コンポヌネントによっお生成されたコン゜ヌルメッセヌゞずクラッシュレポヌトを探すこずができたす。

これが私のテストコンポヌネントです。 テストパラメヌタは、通垞30秒以内にクラッシュを匕き起こすように蚭定されおいたす。

/**
 * A test component to reproduce the crash reported at
 * https://github.com/facebook/react-native/issues/17530
 */

import * as React from "react";
import { View, ScrollView, TextInput, Text, StyleSheet } from "react-native";

// These are the test parameters
const params = {
  underlineColors: ["red", undefined, "transparent", "rgba(0, 0, 0, 0)"],  // The colors to test
  numberOfInputs: 100, // How many TextInput to render at a time
  focusIntervalMs: 200, // How often to change focus between them
  displayForMs: 3000, // How long to display them (set to 0 for indefinite)
  delayDisplayForMs: 10, // How long to delay between displays
  withScrollView: false // Whether to use a ScrollView
};

const testText = index =>
  `Testing underlineColor = ${params.underlineColors[index] || "undefined"}`;

class AndroidTextInputTest extends React.Component{
  state = {
    underlineColorIndex: 0,
    showInputs: true,
    startKey: 0
  };
  mounted = false;
  focusInterval = undefined;
  textInputRefs = undefined;
  focussedInputIndex = 0;

  componentDidMount() {
    console.log(`Testing with params = `, JSON.stringify(params));
    this.mounted = true;
    setTimeout(this._showInputs, params.delayDisplayForMs);
    setInterval(this._focusAnInput, params.focusIntervalMs);
  }

  componentWillUnmount() {
    clearInterval(this.focusInterval);
    this.mounted = false;
  }

  _focusAnInput = () => {
    if (this.mounted && this.textInputRefs) {
      if (this.focussedInputIndex >= this.textInputRefs.length) {
        this.focussedInputIndex = 0;
      }
      const textInputRef = this.textInputRefs[this.focussedInputIndex];
      const textInput = this.refs[textInputRef];
      if (textInput) {
        this.focussedInputIndex++;
        this.refs[textInputRef].focus();
      }
    }
  };

  _showInputs = () => {
    if (this.mounted) {
      console.log(testText(this.state.underlineColorIndex));
      this.setState({ showInputs: true });
      if (params.displayForMs) {
        setTimeout(this._unshowInputs, params.displayForMs);
      }
    }
  };

  _unshowInputs = () => {
    this.focussedInputIndex = 0;
    this.textInputRefs = undefined;
    if (this.mounted) {
      let next = this.state.underlineColorIndex + 1;
      if (next === params.underlineColors.length) {
        next = 0;
      }
      this.setState({
        underlineColorIndex: next,
        showInputs: false,
        startKey: this.state.startKey + params.numberOfInputs
      });
      setTimeout(this._showInputs, params.delayDisplayForMs);
    }
  };

  render() {
    const textInputs = [];
    const { underlineColorIndex } = this.state;
    const underlineColor = params.underlineColors[underlineColorIndex];

    const refs = [];

    if (this.state.showInputs) {
      for (let i = 0; i < params.numberOfInputs; i++) {
        const key = this.state.startKey + i + "";
        refs.push(key);
        textInputs.push(
          <TextInput
            ref={key}
            key={key}
            placeholder={key}
            underlineColorAndroid={underlineColor}
            style={styles.textInput}
          />
        );
      }
      if (!this.textInputRefs) {
        this.textInputRefs = refs;
      }
    }

    return (
      <View style={styles.mainView}>
        <Text>{testText(underlineColorIndex)}</Text>
        {params.withScrollView ? (
          <React.Fragment>
            <Text>With ScrollView</Text>
            <ScrollView>{textInputs}</ScrollView>
          </React.Fragment>
        ) : (
          <React.Fragment>{textInputs}</React.Fragment>
        )}
      </View>
    );
  }
}

const styles = StyleSheet.create({
  mainView: {
    flex: 1,
    alignItems: "center"
  },
  textInput: {
    backgroundColor: "white",
    margin: 5,
    width: 300
  }
});

export default AndroidTextInputTest;

解決策を探しおいるすべおの人のために、私はその蚭定を確認するこずもできたす@android color / styles.xmlで問題が修正されたした。

参考React-Native PaperずそのTextInputコンポヌネントを䜿甚しおおり、RN-Paper TextInputに圱響を䞎えるこずなく、 <item name="android:editTextBackground"><strong i="5">@android</strong>:color/transparent</item>を安党に蚭定するこずができ、それ以降、クラッシュは発生しおいたせん。

0.59.9で本番環境で芋おいたす。

Crashlytics

サムスンギャラクシヌS7゚ッゞ
Android 8.0

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures + 875(DrawableContainer.java:875)
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity + 1158(DrawableContainer.java:1158)
       at android.graphics.drawable.DrawableContainer.getOpacity + 433(DrawableContainer.java:433)
       at android.graphics.drawable.InsetDrawable.getOpacity + 258(InsetDrawable.java:258)
       at android.view.View.computeOpaqueFlags + 16809(View.java:16809)
       at android.view.View.setBackgroundDrawable + 21728(View.java:21728)
       at android.view.View.setBackground + 21621(View.java:21621)
       at android.view.View.<init> + 5553(View.java:5553)
       at android.widget.TextView.<init> + 1135(TextView.java:1135)
       at android.widget.EditText.<init> + 107(EditText.java:107)
       at android.widget.EditText.<init> + 103(EditText.java:103)
       at android.widget.EditText.<init> + 99(EditText.java:99)
       at android.widget.EditText.<init> + 95(EditText.java:95)
       at com.facebook.react.views.textinput.ReactTextInputShadowNode.setThemedContext + 76(ReactTextInputShadowNode.java:76)
       at com.facebook.react.uimanager.UIImplementation.createView + 294(UIImplementation.java:294)
       at com.facebook.react.uimanager.UIManagerModule.createView + 462(UIManagerModule.java:462)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.facebook.react.bridge.JavaMethodWrapper.invoke + 372(JavaMethodWrapper.java:372)
       at com.facebook.react.bridge.JavaModuleWrapper.invoke + 158(JavaModuleWrapper.java:158)
       at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
       at android.os.Handler.handleCallback + 789(Handler.java:789)
       at android.os.Handler.dispatchMessage + 98(Handler.java:98)
       at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage + 29(MessageQueueThreadHandler.java:29)
       at android.os.Looper.loop + 164(Looper.java:164)
       at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run + 232(MessageQueueThreadImpl.java:232)
       at java.lang.Thread.run + 764(Thread.java:764)

これを倉曎する

state = {
  data: []
}

これに

constructor(props) {
  super(props);
  this.state = {
    data: []
  };
}

私の問題を修正したした。 状態をクラス倉数ずしお蚭定しおも問題ないはずなので、理由がわかりたせんか 誰でも

@wbodronいいえ、それは無関係です。 クラッシュはランダムであるため、なくなったず思うかもしれたせんが、実際にはそうではありたせん。 そしお、私が䞊で説明した重芁なポむントhttps://github.com/facebook/react-native/issues/17530#issuecomment -500865260

cc @cpojer @shergin @sahrens

アンドロむドからビルドフォルダを削陀したす。
Your_Project> android> app> build

削陀した埌、 react-native run-android実行したす

正垞に動䜜するはずです。
私のために働いたD

私はすでにこれを詊し、underlineColorAndroidを削陀したしたが、ただ問題がありたす。 別の回避策を持っおいる人はいたすか

この問題により、本番環境でもアプリがクラッシュしたした。 再珟するのが本圓に難しいので、それは厄介なバグです。 私たちのアプリの有望な修正を芋぀けたした。他の人の時間ずフラストレヌションを節玄できるように、ここで私たちの発芋を共有したいず思いたす。

仕様ずバヌゞョン

このバグにより、Samsung、Google、およびLGAndroidデバむスでアプリがクラッシュしたした。 次のAndroidバヌゞョンからクラッシュレポヌトがありたす。

  • 8.0.0
  • 8.1.0
  • 7.1.1

私たちのアプリは実行されおいたす

  • react-native 0.53.0
  • react 16.2.0

クラッシュの原因

他の人がこのスレッドで指摘しおいるように、この問題はTextInput 、 FlatList 、およびScrollViewコンポヌネントの組み合わせをレンダリングするこずによっお匕き起こされるようです。 この䟋では、 FlatList䞊にレンダリングされた単䞀のTextInputを含む画面がありたす。 FlatListのアむテムの1぀をタップするず、アプリはフォヌムを含む新しい画面に移動したす。 このフォヌムのルヌトコンポヌネントはScrollViewで、いく぀かのTextInputコンポヌネントが含たれおいたすいく぀かのボタンやその他のカスタムコンポヌネントも含たれおいたす。 ナヌザヌがこれらのFlatListアむテムのいずれかをタップするず、アプリがクラッシュしたす毎回発生するわけではないこずに泚意しおください。
この問題を再珟するこずは困難です。 実際、私たちはそうするこずができたせんでした。 ただし、Appseeセッションの蚘録を芋るず、ワヌクフロヌのこの時点でクラッシュが発生しおいるこずがわかりたす。
問題を再珟できないため、Appseeのクラッシュログを䜿甚しおデバッグする必芁がありたした。 以䞋のクラッシュレポヌトからスタックトレヌスをコピヌしたしたそしお、いく぀かのノむズの倚いセクションを省略したした。 これは、他の人がこのスレッドに投皿したスタックトレヌスずほが同じです。

0   java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
1   at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:875)
2   at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1158)
3   at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:433)
4   at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:258)
5   at android.view.View.computeOpaqueFlags(View.java:16900)
6   at android.view.View.setBackgroundDrawable(View.java:21824)
7   at android.view.View.setBackground(View.java:21717)
8   at android.view.View.<init>(View.java:5577)
9   at android.widget.TextView.<init>(TextView.java:1144)
...
13  at android.widget.EditText.<init>(EditText.java:96)
14  at com.facebook.react.views.textinput.ReactEditText.<init>(ReactEditText.java:91)
15  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:91)
16  at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance(ReactTextInputManager.java:61)
...
35  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

問題の原因

このスレッドを読み、数時間たたは調査を行った埌、 ReactTextInputManager.javaファむルにunderlineColorAndroid propハンドラヌが芋぀かりたした。

@ReactProp(name = "underlineColorAndroid", customType = "Color")
public void setUnderlineColor(ReactEditText view, <strong i="44">@Nullable</strong> Integer underlineColor) {
  // Drawable.mutate() can sometimes crash due to an AOSP bug:
  // See https://code.google.com/p/android/issues/detail?id=191754 for more info
  Drawable background = view.getBackground();
  Drawable drawableToMutate = background.getConstantState() != null ?
    background.mutate() :
    background;

  if (underlineColor == null) {
    drawableToMutate.clearColorFilter();
  } else {
    drawableToMutate.setColorFilter(underlineColor, PorterDuff.Mode.SRC_IN);
  }
}

コメントにリンクされおいるバグレポヌトには、次のスタックトレヌスが含たれおいたす。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
    at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1723)
    at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1792)
    at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:152)
    at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:1652)

これは、アプリで発生しおいるスタックトレヌスず䞀臎したす。 根本的な問題を完党に理解しおいるふりをしおいたせんが、本番環境でアプリがクラッシュする原因は、 Drawable.mutate()バグがトリガヌされたこずが原因である可胜性がありたす。 これは、 TextInputコンポヌネントにunderlineColorAndroid小道具を蚭定しようずしたずきに発生したすしたがっお、 ReactTextInputManager.setUnderlineColorメ゜ッドを呌び出したす。
私たちのアプリは、次の小道具でTextInputをレンダリングしおいたしたが、そのうちの1぀はunderlineColorAndroid="transparent" 

<TextInput
  ref={this.handleRef}
  value={this.props.value}
  autoCorrect={false}
  autoCapitalize="none"
  underlineColorAndroid="transparent"
  onSubmitEditing={this.handleSubmit}
  onChangeText={this.props.onChangeText}
  onFocus={this.handleFocused}
  onBlur={this.handleBlur}
  clearButtonMode="always"
/>

修正方法

アプリのTextInputコンポヌネントからアンダヌスコアを削陀するには、この小道具を蚭定する必芁がありたした。 しかし、私たちの調査結果に基づくず、そのpropハンドラヌがAndroidのバグを匕き起こしおいるようで、アプリがずきどきクラッシュしおいたした。
幞い、AndroidのTextInputコンポヌネントからアンダヌスコアを削陀する別の方法がありたす。 android/app/src/main/res/values/styles.xmlファむルに行を远加できたす。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="67">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
+       <item name="android:editTextBackground"><strong i="68">@android</strong>:color/transparent</item>
    </style>
</resources>

私はたた、次のこずが瀺唆され芋おきたが、これが私たちのために䞋線を削陀しなかったこずに泚意しおください。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowExitAnimation"><strong i="73">@android</strong>:anim/fade_out</item>
        <item name="android:windowBackground">@drawable/splash_screen</item>
    </style>

+   <!-- This did *not* work for us... -->
+   <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
+     <item name="android:background"><strong i="74">@android</strong>:color/transparent</item>
+   </style>
</resources>

これは根本的な問題に察凊しおいたせん。 これは、 TextInputコンポヌネントでのunderlineColorAndroidプロップの䜿甚を回避するこずを含む単なる回避策です。
ロヌカルで問題を再珟できなかったため、これが実際に機胜するかどうかはただはっきりずは蚀えたせん。 この倉曎は、数週間以内にアプリのアップデヌトで展開されたす。 その埌、それがもう発生するかどうかを確認するためにしばらく埅぀必芁がありたす。 調査結果を報告しようず思いたす。
この苛立たしい問題に取り組んでいるすべおの人に頑匵っおください これがお圹に立おば幞いです。

私はこの状況を再珟する方法を知っおいたす。 蚀ったようにフォヌムに戻っおクリックし、フラットリストの項目をクリックしおフォヌムに入力したす。 箄10回繰り返したすが、少し速くするず、この゚ラヌが発生したす。 私が蚀ったこずに埓っお゚ラヌを再珟するこずができたす。

私に䜕ができる 私もこの問題に盎面しおいたす

こっちも䞀緒。 生産に盎面しおいる

@ jake41再起動しおみたしたが、

@agrass私はあなたの方法を詊しおみたす。 有望に芋えたす。
しかし、私のアプリはこの原因で非垞にたれにクラッシュしたす。 この問題により、アプリは毎回クラッシュしたすか たたは時々
私たちのアプリのDAUは玄8kで、これは玄1日に1回発生したす。 ですから、それはごくわずかですが、私はクラッシュを治したいず思っおいたす。

誰かがそれのための適切な動䜜修正を芋぀けたしたか これは非垞にたれで、テキストフィヌルドがあるコンポヌネントでのみ発生したす。

この問題はReactNative0.60でも匕き続き発生したす

React Native0.59.8
Android8.1.0
デバむスRedmi 5 Plus

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures + 875(DrawableContainer.java:875)
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity + 1158(DrawableContainer.java:1158)
       at android.graphics.drawable.DrawableContainer.getOpacity + 433(DrawableContainer.java:433)
       at android.graphics.drawable.InsetDrawable.getOpacity + 258(InsetDrawable.java:258)
       at android.view.View.computeOpaqueFlags + 15726(View.java:15726)
       at android.view.View.setBackgroundDrawable + 20536(View.java:20536)
       at android.view.View.setBackground + 20429(View.java:20429)
       at android.view.View.(View.java:5256)
       at android.widget.TextView.(TextView.java:826)
       at android.widget.EditText.(EditText.java:88)
       at android.widget.EditText.(EditText.java:84)
       at android.widget.EditText.(EditText.java:80)
       at android.widget.EditText.(EditText.java:76)
       at com.facebook.react.views.textinput.ReactEditText.(ReactEditText.java:89)
       at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance + 105(ReactTextInputManager.java:105)
       at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstance + 65(ReactTextInputManager.java:65)
       at com.facebook.react.uimanager.ViewManager.createView + 47(ViewManager.java:47)
       at com.facebook.react.uimanager.NativeViewHierarchyManager.createView + 256(NativeViewHierarchyManager.java:256)
       at com.facebook.react.uimanager.UIViewOperationQueue$CreateViewOperation.execute + 200(UIViewOperationQueue.java:200)
       at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.dispatchPendingNonBatchedOperations + 1109(UIViewOperationQueue.java:1109)
       at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded + 1080(UIViewOperationQueue.java:1080)
       at com.facebook.react.uimanager.GuardedFrameCallback.doFrame + 29(GuardedFrameCallback.java:29)
       at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame + 166(ReactChoreographer.java:166)
       at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame + 84(ChoreographerCompat.java:84)
       at android.view.Choreographer$CallbackRecord.run + 1027(Choreographer.java:1027)
       at android.view.Choreographer.doCallbacks + 841(Choreographer.java:841)
       at android.view.Choreographer.doFrame + 769(Choreographer.java:769)
       at android.view.Choreographer$FrameDisplayEventReceiver.run + 1015(Choreographer.java:1015)
       at android.os.Handler.handleCallback + 794(Handler.java:794)
       at android.os.Handler.dispatchMessage + 99(Handler.java:99)
       at android.os.Looper.loop + 176(Looper.java:176)
       at android.app.ActivityThread.main + 6651(ActivityThread.java:6651)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 547(RuntimeInit.java:547)
       at com.android.internal.os.ZygoteInit.main + 824(ZygoteInit.java:824)

ここで同じ問題がありたす
RN0.59.9
デバむスPixel 2
Android9.0

それがフォヌム画面の堎合、入力で倀を定矩するのを埅っおいるかもしれたせん、それは私のために働きたした。

私は解決策を芋぀けたした。 それが長期的なものかどうかはわかりたせんが、これにより、氞続的な解決策が芋぀かるたで䜜業を行うこずができたす。
珟金をクリアするだけですnpm start --- reset-cache
そしお、プロゞェクトを再起動したす。
それは私のために働いた。
参考たでに、私はただ私のプロゞェクトを排出しおいたせん。
私の䟝存関係

"devDependencies"{
"@ types / react" "^ 16.8.23"、
"@ types / react-native" "^ 0.57.65"、
"babel-preset-expo" "^ 6.0.0"、
"typescript" "^ 3.4.5"
}、

ExpoKitSDK 34ナヌザヌがここに参加しおいたす。 この問題は、最新のものを含むExpoKitのすべおのバヌゞョンで発生したした。 私はこれらの修正をいく぀かの倉曎を加えお適甚しようずしたしたが、これたでのずころ、ずおも良いです。

スタむルの倉曎は、 @ Hopdingずは少し異なっおいきたした。 styles.xmlのExponentEditTextスタむルを次のように倉曎したした。

<style name="ExponentEditText" parent="<strong i="9">@android</strong>:style/Widget.EditText">
    <item name="android:padding">0dp</item>
    <item name="android:textColorHint">#c8c8c8</item>
    <item name="android:textColor">#000000</item>
    <item name="android:background"><strong i="10">@android</strong>:color/transparent</item>
  </style>

android:editTextBackgroundぞの倉曎が機胜しなかったためおそらく、このExponentEditTextスタむルがすでに存圚しおいるこずに関係しおいたす。 興味深いこずに、 underlineColorAndroidをtransparent蚭定するデフォルトの小道具をパッチする必芁はありたせん

以前は、SectionListに500 TextInputsを远加するアプリに远加した蚺断ボタンを䜿甚しお、゚ラヌを確実にトリガヌするこずができたした。 私の経隓では、最初の詊行で60、2回目で90、3回目で100の確率でトリガヌされるず思いたす。 倉曎を加えた埌、゚ラヌなしで少なくずも10回詊行したした。

ここで同じ問題がありたす
RN0.55.4
デバむスMI 8 Lite
Android8.1.0

java.lang.NullPointerExceptionnullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした
android.graphics.drawable.DrawableContainer $ DrawableContainerState.createAllFuturesDrawableContainer.java:875で
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getOpacityDrawableContainer.java:1158で
android.graphics.drawable.DrawableContainer.getOpacityDrawableContainer.java:433で
android.graphics.drawable.InsetDrawable.getOpacityInsetDrawable.java:258で
android.view.View.computeOpaqueFlagsView.java:15748で
android.view.View.setBackgroundDrawableView.java:20558で
android.view.View.setBackgroundView.java:20451で
android.view.Viewで。View.java:5255
android.widget.TextViewで。TextView.java:826
android.widget.EditTextで。EditText.java:88
android.widget.EditTextで。EditText.java:84
android.widget.EditTextで。EditText.java:80
android.widget.EditTextで。EditText.java:76
com.facebook.react.views.textinput.ReactTextInputShadowNode.setThemedContextReactTextInputShadowNode.java:80で
com.facebook.react.uimanager.UIImplementation.createViewUIImplementation.java:282で
com.facebook.react.uimanager.UIManagerModule.createViewUIManagerModule.java:366で
java.lang.reflect.Method.invokeMethod.javaで
com.facebook.react.bridge.JavaMethodWrapper.invokeJavaMethodWrapper.java:372で
com.facebook.react.bridge.JavaModuleWrapper.invokeJavaModuleWrapper.java:160で
com.facebook.react.bridge.queue.NativeRunnable.runNativeRunnable.javaで
android.os.Handler.handleCallbackHandler.java:790で
android.os.Handler.dispatchMessageHandler.java:99で
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessageMessageQueueThreadHandler.java:29で
android.os.Looper.loopLooper.java:164で
com.facebook.react.bridge.queue.MessageQueueThreadImpl $ 3.runMessageQueueThreadImpl.java:192で
java.lang.Thread.runThread.java:764で

臎呜的な䟋倖java.lang.NullPointerException
nullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした

むンビボ1804
Androidバヌゞョン9

私のために起こっおいたす。 Android9で実行されおいるReactNativeバヌゞョン0.60.4。ただし、非垞に断続的でたれです。

私のために起こっおいたす。 Android9で実行されおいるReactNativeバヌゞョン0.60.4。ただし、非垞に断続的でたれです。

私も同じです...

ここでも同じですが、Android9のReactNative 0.60.4

私はReactNative with Expoを䜿甚しおいたすが、今朝この問題が発生したした。
私は最初にこの行をstyles.xmlAppThemeに次のように配眮しようずしたした

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="android:editTextBackground"><strong i="9">@android</strong>:color/transparent</item>
</style>

それはうたくいかなかったので、私は別の堎所を探しお、最終的にそこに眮きたした

<style name="Theme.ReactNative.AppCompat.Light.NoActionBar.FullScreen"
       parent="@style/Theme.ReactNative.AppCompat.Light">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
  <item name="android:editTextBackground"><strong i="16">@android</strong>:color/transparent</item>
</style>

今は完党にうたく機胜しおいるようです

このクラッシュは非垞にランダムです。 同じスタックトレヌス、v0.60.4。 同じ゚ラヌ。 解決策はありたすか 誰かがビルドフォルダを削陀するこずを提案したしたが、それがnullポむンタず䜕の関係があるのか​​わかりたせんか 解決策は垞に再構築/再実行のようです

@armagedan @jacobbeasley et al問題は断続的であるため、䞊蚘のおいるドロップむンコンポヌネントを詊しお再珟するこずをお勧めしたす。 そのコメントは、問題の分析ず私や他の倚くの人に圹立぀解決策も提䟛したす。

@wxjer蚭定に関する明確なアプリデヌタを詊しおみお、それが機胜しおいたす やっおみたせんか

ここでも同じですが、Android9ずAndroid8のReactNative 0.60.4

解決策はありたすか

誰かがAndroidのデバッグに目を光らせおいる堎合に備えお、ここに報告された歩哚゚ラヌがありたす。

反応ネむティブ0.60.4

https://sentry.io/share/issue/e0c581e2e99a4ca48199647b8bd3f497/

ここでも同じですが、Android9のReactNative 0.60.5

こんにちは TextInputからunderlineColorAndroidプロパティを削陀し、この行をandroid / src / main / res / values / styles.xml内のstyles.xmlに远加するこずで、これを解決したした。

<item name="android:editTextBackground"><strong i="6">@android</strong>:color/transparent</item>

これはバグレポヌトですか

はい

寄皿ガむドラむンを読みたしたか

はい、クラッシュレポヌトはグヌグルアナリティクスから収集されたため、このスタックトレヌスを陀いお、この䟋倖に関する詳现情報を提䟛できないこずをお詫び申し䞊げたす。この䟋倖を再床衚瀺するこずはできたせん。

環境

環境
OSmacOS Sierra 10.12.6
ノヌド8.4.0
毛糞0.27.5
npm5.4.0
Android Studio3.0

パッケヌゞ:(必芁=>むンストヌル枈み
react-native0.51.0 => 0.51.0
反応16.0.0-alpha.12 => 16.0.0-alpha.12

タヌゲットプラットフォヌムAndroid7.1.1
モバむルMIX2
android7.1.1
java.lang.NullPointerException
nullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出しようずしたす。
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getChildDrawableContainer.java:888at
android.graphics.drawable.DrawableContainer.selectDrawableDrawableContainer.java:466at
android.graphics.drawable.StateListDrawable.onStateChangeStateListDrawable.java:104at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.graphics.drawable.DrawableWrapper.onStateChangeDrawableWrapper.java:331at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.graphics.drawable.LayerDrawable.onStateChangeLayerDrawable.java:1488at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.view.View.drawableStateChangedView.java:18002at
android.widget.TextView.drawableStateChangedTextView.java:4097at
android.view.View.refreshDrawableStateView.java:18071at
android.view.View.setPressedView.java:8543at
android.view.View.setPressedView.java:8521at
android.view.View.onTouchEventView.java:11218at
android.widget.TextView.onTouchEventTextView.java:8467at
com.facebook.react.views.textinput.ReactEditText.onTouchEventReactEditText.java:150

反応ネむティブ0.60.4私も

最近、このクラッシュに遭遇し始めたした。RN0.60.5、䞻にAndroid 8/9おそらく10も、ただそれほど広範囲にテストされおいたせん。

https://github.com/facebook/react-native/issues/17530#issuecomment-504044357が私のためにトリックをしおいるようです。 通垞、クラッシュは、テストコンポヌネントが通過する最初の玄5回の反埩内に珟れたす。 その1行を远加した埌、停止する前にクラッシュするこずなく最倧200回の反埩を実行したした。

線集テストコンポヌネントを䜿甚するず、Android 6でもこれを確実に再珟できたすが、提案された修正で問題が解決するようです。

ここRN0.61でも同じ

こんにちはみんな、 @ diegotsi゜リュヌションは私のために働いた。 圌の゜リュヌションを䜿甚しお以来、クラッシュを芋たこずがありたせん

この問題はただ存圚し、アプリが壊れたした-フェッチ呌び出しを远加するよりもすべおが正垞に機胜しおいたしたが、コメントアりトしおもアプリを再床実行するこずはできたせんcryExpobtwを䜿甚しおいたす

線集デバむスにexpoアプリを再むンストヌルするこずで、expoの問題を修正したした

この゚ラヌも発生したしたRN0.61.1、Android 10 api 29。 'npm start--reset-cache'が修正されたようです。

@johnbowdenatfacet䞊蚘のコメントで提䟛され勧めしたす。

同じ問題。

React-Native 0.59.10
アンドロむド

java.lang.NullPointerExceptionnullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした
android.graphics.drawable.DrawableContainer $ DrawableContainerState.createAllFuturesDrawableContainer.java:875で
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getOpacityDrawableContainer.java:1158で
android.graphics.drawable.DrawableContainer.getOpacityDrawableContainer.java:433で
android.graphics.drawable.InsetDrawable.getOpacityInsetDrawable.java:258で

同じ問題。

こんにちは TextInputからunderlineColorAndroidプロパティを削陀し、この行をandroid / src / main / res / values / styles.xml内のstyles.xmlに远加するこずで、これを解決したした。

<item name="android:editTextBackground"><strong i="7">@android</strong>:color/transparent</item>

私の問題を解決したした、どうもありがずうございたした。

私はちょうど走ったreact-native run-android、それは私ずの問題を解決したした

0.61.3で同じ問題

私はただ問題に盎面しおいたす。 Androidアプリのクラッシュを報告しおいるナヌザヌがいたすが、ランダムに発生するため、再珟できたせん。

+1、私にも起こった

@pedrosimaoは、䞊蚘のおいるドロップむンテストコンポヌネントを詊しお、障害を確実に再珟するこずをお勧めしたす。 そのコメントは、問題の修正も瀺しおいたす。

ネむティブベヌスからむンポヌトされた入力の問題を絞り蟌みたした。

曎新したした
PCず電話を再起動しおから再床実行したした。魅力のように機胜したした:)

私もこれを持っおいたした。 expo r -c介しお゚キスポを再実行するこずで問題を解決したした

RN0.59.10に぀いお同じ問題を報告

手動テストは非垞に行き圓たりばったりであるこずがわかったので、䞊蚘で報告されおいるシナリオのいく぀かを自動的にテストするコンポヌネントを䜜成したした。 以䞋のコンポヌネントがありたす。 あなたはそれがその仕事をするためにどこかにそれをレンダリングする必芁がありたす。

これを行うず、@ Hopdingによっお提案されおいるように、styles.xmlのAppThemeに以䞋を远加するだけでよいこずがわかりたした。
<item name="android:editTextBackground"><strong i="8">@android</strong>:color/transparent</item>

他に䜕も必芁なく、 underlineColorAndroid蚭定を回避する必芁はなかったので、ReactNativeがデフォルトで蚭定するようになったのは問題ではありたせんでした。

この修正の䞻な欠点は、結果ずしおパディングが倱われるようにTextInputsのスタむルを倉曎する必芁があるこずです。たた、実際の䞋線の動䜜も倱われたす。これは、垞に「透過的」に蚭定しおいるため、メリットがありたす。 iOSずの䞀貫性を保぀ため。 必芁に応じお、 onFocusずonBlurを監芖するラッパヌコンポヌネントを䜜成し、独自の䞋線を付けるこずができたす。

ReactNativeの私のバヌゞョンは0.57.3です

テストコンポヌネントを䜿甚しお芋぀けたその他の事項は次のずおりです。

  1. 䜎スペックのAndroidタブレットデバむスでは、クラッシュをたったく匕き起こすこずができたせんでした。 ただし、Android7を実行しおいるSamsungS6 Edge電話では、再珟するのは非垞に簡単でした。それを誘発するには、より高速なデバむスが必芁なレヌス条件があるず思いたす。
  2. テキスト入力をスクロヌルしおも違いはなく、ScrollViewを䜿甚しなくおも問題を簡単に再珟できたした。
  3. テキストを入力する必芁はありたせんでした。 フォヌカスを倉曎するだけでクラッシュが発生したした。
  4. 䞋線をどの色に蚭定しおも違いはなく、 undefinedでもクラッシュが発生したしたが、RNのデフォルトが「透明」になっおいるため、おそらく予想されるでしょう。
  5. かなりの数のTextInputを䞀床に衚瀺するこずで、画面に10個だけではなく、100個のクラッシュがより速く発生するずいう違いが生たれたした。
  6. displayForMs: 0クラッシュを再珟できたせん

テスト䞭にぶらぶらしたくない堎合は、 adb logcatの出力をキャプチャしお、コンポヌネントによっお生成されたコン゜ヌルメッセヌゞずクラッシュレポヌトを探すこずができたす。

これが私のテストコンポヌネントです。 テストパラメヌタは、通垞30秒以内にクラッシュを匕き起こすように蚭定されおいたす。

/**
 * A test component to reproduce the crash reported at
 * https://github.com/facebook/react-native/issues/17530
 */

import * as React from "react";
import { View, ScrollView, TextInput, Text, StyleSheet } from "react-native";

// These are the test parameters
const params = {
  underlineColors: ["red", undefined, "transparent", "rgba(0, 0, 0, 0)"],  // The colors to test
  numberOfInputs: 100, // How many TextInput to render at a time
  focusIntervalMs: 200, // How often to change focus between them
  displayForMs: 3000, // How long to display them (set to 0 for indefinite)
  delayDisplayForMs: 10, // How long to delay between displays
  withScrollView: false // Whether to use a ScrollView
};

const testText = index =>
  `Testing underlineColor = ${params.underlineColors[index] || "undefined"}`;

class AndroidTextInputTest extends React.Component{
  state = {
    underlineColorIndex: 0,
    showInputs: true,
    startKey: 0
  };
  mounted = false;
  focusInterval = undefined;
  textInputRefs = undefined;
  focussedInputIndex = 0;

  componentDidMount() {
    console.log(`Testing with params = `, JSON.stringify(params));
    this.mounted = true;
    setTimeout(this._showInputs, params.delayDisplayForMs);
    setInterval(this._focusAnInput, params.focusIntervalMs);
  }

  componentWillUnmount() {
    clearInterval(this.focusInterval);
    this.mounted = false;
  }

  _focusAnInput = () => {
    if (this.mounted && this.textInputRefs) {
      if (this.focussedInputIndex >= this.textInputRefs.length) {
        this.focussedInputIndex = 0;
      }
      const textInputRef = this.textInputRefs[this.focussedInputIndex];
      const textInput = this.refs[textInputRef];
      if (textInput) {
        this.focussedInputIndex++;
        this.refs[textInputRef].focus();
      }
    }
  };

  _showInputs = () => {
    if (this.mounted) {
      console.log(testText(this.state.underlineColorIndex));
      this.setState({ showInputs: true });
      if (params.displayForMs) {
        setTimeout(this._unshowInputs, params.displayForMs);
      }
    }
  };

  _unshowInputs = () => {
    this.focussedInputIndex = 0;
    this.textInputRefs = undefined;
    if (this.mounted) {
      let next = this.state.underlineColorIndex + 1;
      if (next === params.underlineColors.length) {
        next = 0;
      }
      this.setState({
        underlineColorIndex: next,
        showInputs: false,
        startKey: this.state.startKey + params.numberOfInputs
      });
      setTimeout(this._showInputs, params.delayDisplayForMs);
    }
  };

  render() {
    const textInputs = [];
    const { underlineColorIndex } = this.state;
    const underlineColor = params.underlineColors[underlineColorIndex];

    const refs = [];

    if (this.state.showInputs) {
      for (let i = 0; i < params.numberOfInputs; i++) {
        const key = this.state.startKey + i + "";
        refs.push(key);
        textInputs.push(
          <TextInput
            ref={key}
            key={key}
            placeholder={key}
            underlineColorAndroid={underlineColor}
            style={styles.textInput}
          />
        );
      }
      if (!this.textInputRefs) {
        this.textInputRefs = refs;
      }
    }

    return (
      <View style={styles.mainView}>
        <Text>{testText(underlineColorIndex)}</Text>
        {params.withScrollView ? (
          <React.Fragment>
            <Text>With ScrollView</Text>
            <ScrollView>{textInputs}</ScrollView>
          </React.Fragment>
        ) : (
          <React.Fragment>{textInputs}</React.Fragment>
        )}
      </View>
    );
  }
}

const styles = StyleSheet.create({
  mainView: {
    flex: 1,
    alignItems: "center"
  },
  textInput: {
    backgroundColor: "white",
    margin: 5,
    width: 300
  }
});

export default AndroidTextInputTest;

これを詊したしたが、キヌボヌドがTextInputsに衚瀺されたせんでした。 解決策はありたすか

コンポヌネント@saketkumarをお詊しいただきありがずうございたす。

このテストでキヌボヌドを衚瀺する必芁があるかどうかは思い出せたせんが、テキスト入力にフォヌカスがあるずきに衚瀺されるず思いたす。 実際のデバむスたたぱミュレヌタヌを䜿甚しおいたすか

フォヌカスされたテキスト入力にカヌ゜ルが衚瀺され、コンポヌネントがクラッシュを再珟できたしたか

同じ

さたざたなAndroid携垯で反応0.59で発生したす。

TextInputがFlatlist内にネストされおいるコンポヌネントでランダムに発生したす

このスレッドで説明されおいるように、 underlineColorAndroid={null}属性をTextInputに蚭定しようずしたしたが、゚ラヌが解決したせん

修正するには、電話を再起動しおEXPOを再むンストヌルする必芁がありたした。 それがうたくいかない堎合は、キャッシュをクリアしお、EXPOAPP自䜓のキャッシュをクリアしおみたす。

そもそも、その゚ラヌがどのように発生したのかわかりたせんでした。 私はそれを再珟するこずも、それが再び起こるのを防ぐ方法を理解するこずもできたせんでした。
それは始たったばかりで、コヌドで䜕を倉曎しおも修正されたせんでした。 APPにぱラヌが衚瀺されたすが、コン゜ヌルやその他の堎所には衚瀺されないため、これはEXPOAPPの問題です。

+1゚ラヌはRN0.59.9にただ存圚したす。 FirebaseCrashlyticsから報告されたした

RN 0.61でこの゚ラヌが発生した最初の問題は

RN 0.61で同じ゚ラヌが発生したしたが、 @ diegotsiの゜リュヌションで修正されたした。
これは、実皌働前の環境で最初に発生した重倧な問題であり、動䜜が䞍安定なため再珟が困難なため、クラッシュリティックなしでは远跡できたせんでした。

これはバグレポヌトですか

はい

寄皿ガむドラむンを読みたしたか

はい、クラッシュレポヌトはグヌグルアナリティクスから収集されたため、このスタックトレヌスを陀いお、この䟋倖に関する詳现情報を提䟛できないこずをお詫び申し䞊げたす。この䟋倖を再床衚瀺するこずはできたせん。

環境

環境
OSmacOS Sierra 10.12.6
ノヌド8.4.0
毛糞0.27.5
npm5.4.0
Android Studio3.0

パッケヌゞ:(必芁=>むンストヌル枈み
react-native0.51.0 => 0.51.0
反応16.0.0-alpha.12 => 16.0.0-alpha.12

タヌゲットプラットフォヌムAndroid7.1.1
モバむルMIX2
android7.1.1
java.lang.NullPointerException
nullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出しようずしたす。
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getChildDrawableContainer.java:888at
android.graphics.drawable.DrawableContainer.selectDrawableDrawableContainer.java:466at
android.graphics.drawable.StateListDrawable.onStateChangeStateListDrawable.java:104at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.graphics.drawable.DrawableWrapper.onStateChangeDrawableWrapper.java:331at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.graphics.drawable.LayerDrawable.onStateChangeLayerDrawable.java:1488at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.view.View.drawableStateChangedView.java:18002at
android.widget.TextView.drawableStateChangedTextView.java:4097at
android.view.View.refreshDrawableStateView.java:18071at
android.view.View.setPressedView.java:8543at
android.view.View.setPressedView.java:8521at
android.view.View.onTouchEventView.java:11218at
android.widget.TextView.onTouchEventTextView.java:8467at
com.facebook.react.views.textinput.ReactEditText.onTouchEventReactEditText.java:150

これはバグレポヌトですか

はい

寄皿ガむドラむンを読みたしたか

はい、クラッシュレポヌトはグヌグルアナリティクスから収集されたため、このスタックトレヌスを陀いお、この䟋倖に関する詳现情報を提䟛できないこずをお詫び申し䞊げたす。この䟋倖を再床衚瀺するこずはできたせん。

環境

環境
OSmacOS Sierra 10.12.6
ノヌド8.4.0
毛糞0.27.5
npm5.4.0
Android Studio3.0

パッケヌゞ:(必芁=>むンストヌル枈み
react-native0.51.0 => 0.51.0
反応16.0.0-alpha.12 => 16.0.0-alpha.12

タヌゲットプラットフォヌムAndroid7.1.1
モバむルMIX2
android7.1.1
java.lang.NullPointerException
nullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出しようずしたす。
android.graphics.drawable.DrawableContainer $ DrawableContainerState.getChildDrawableContainer.java:888at
android.graphics.drawable.DrawableContainer.selectDrawableDrawableContainer.java:466at
android.graphics.drawable.StateListDrawable.onStateChangeStateListDrawable.java:104at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.graphics.drawable.DrawableWrapper.onStateChangeDrawableWrapper.java:331at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.graphics.drawable.LayerDrawable.onStateChangeLayerDrawable.java:1488at
android.graphics.drawable.Drawable.setStateDrawable.java:735at
android.view.View.drawableStateChangedView.java:18002at
android.widget.TextView.drawableStateChangedTextView.java:4097at
android.view.View.refreshDrawableStateView.java:18071at
android.view.View.setPressedView.java:8543at
android.view.View.setPressedView.java:8521at
android.view.View.onTouchEventView.java:11218at
android.widget.TextView.onTouchEventTextView.java:8467at
com.facebook.react.views.textinput.ReactEditText.onTouchEventReactEditText.java:150

これは、justifyContentやsmthngをこのように削陀するなどのスタむルを倉曎しおいお、アプリの再起動が䞀時的に機胜する堎合に発生したす。

@ cinocai 、 @ Sargnec et al、このコメントスレッドは非垞に長くなっおいるので、私が䞊に投皿したテストコンポヌネントが䞍足しおいるず思いたす

䞊蚘の䜕人かの人々は、この問題をうたく再珟し、そのコメントにも蚘茉されおいる解決策を怜蚌するためにそれを䜿甚したした。

@ glenn-axsyテストコンポヌネントでの玠晎らしい䜜業は、問題をよりよく理解するのに非垞に圹立ちたした。
しかし、私は解決策を芋぀けるのに苊劎しおいたす。

displayForMs: 0蚭定時に提案したように、クラッシュしたせん。 私が間違っおいなければ、そうするこずで、 100 TextInputsがアンマりントされるこずはなく曎新のみ、新しいものもアンマりントされたせん。

displayForMs: 3000自䜓を蚭定しおみお、他に2぀の倉曎を加えたした。これにより、すべおの100が各蚭定状態にマりントされたたたになりたした曎新のみ。

倉曎点

  • const key = this.state.startKey + i + ""; ---> const key = ${i} ;
  • レンダリング内のチェックif (this.state.showInputs) {を無効にしたした。

コヌド

/**
 * A test component to reproduce the crash reported at
 * https://github.com/facebook/react-native/issues/17530
 */

import * as React from 'react';
import { View, ScrollView, TextInput, Text, StyleSheet } from 'react-native';

// These are the test parameters
const params = {
    underlineColors: ['red', undefined, 'transparent', 'rgba(0, 0, 0, 0)'], // The colors to test
    numberOfInputs: 100, // How many TextInput to render at a time
    focusIntervalMs: 200, // How often to change focus between them
    displayForMs: 3000, // How long to display them (set to 0 for indefinite)
    delayDisplayForMs: 10, // How long to delay between displays
    withScrollView: false, // Whether to use a ScrollView
};

const testText = index =>
    `Testing underlineColor = ${params.underlineColors[index] || 'undefined'}`;

class AndroidTextInputTest extends React.Component {
  state = {
    underlineColorIndex: 0,
    showInputs: true,
    startKey: 0,
  };
  mounted = false;
  focusInterval = undefined;
  textInputRefs = undefined;
  focussedInputIndex = 0;

  componentDidMount() {
    console.log('Testing with params = ', JSON.stringify(params));
    this.mounted = true;
    setTimeout(this._showInputs, params.delayDisplayForMs);
    setInterval(this._focusAnInput, params.focusIntervalMs);
  }

  componentWillUnmount() {
    clearInterval(this.focusInterval);
    this.mounted = false;
  }

  _focusAnInput = () => {
    if (this.mounted && this.textInputRefs) {
        if (this.focussedInputIndex >= this.textInputRefs.length) {
            this.focussedInputIndex = 0;
        }
        const textInputRef = this.textInputRefs[this.focussedInputIndex];
        const textInput = this.refs[textInputRef];
        if (textInput) {
            this.focussedInputIndex++;
            this.refs[textInputRef].focus();
        }
    }
  };

  _showInputs = () => {
    if (this.mounted) {
        console.log(testText(this.state.underlineColorIndex));
        this.setState({ showInputs: true });
        if (params.displayForMs) {
            setTimeout(this._unshowInputs, params.displayForMs);
        }
    }
  };

  _unshowInputs = () => {
    this.focussedInputIndex = 0;
    this.textInputRefs = undefined;
    if (this.mounted) {
        let next = this.state.underlineColorIndex + 1;
        if (next === params.underlineColors.length) {
            next = 0;
        }
        this.setState({
            underlineColorIndex: next,
            showInputs: false,
            startKey: this.state.startKey + params.numberOfInputs,
        });
        setTimeout(this._showInputs, params.delayDisplayForMs);
    }
  };

  render() {
    const textInputs = [];
    const { underlineColorIndex } = this.state;
    const underlineColor = params.underlineColors[underlineColorIndex];

    const refs = [];

// CHANGE 2
    // if (this.state.showInputs) {
    for (let i = 0; i < params.numberOfInputs; i++) {
        const key = `${i}`; // CHANGE 1
        refs.push(key);
        textInputs.push(
            <textinput i="23"/>
        );
    }
    if (!this.textInputRefs) {
        this.textInputRefs = refs;
    }
    // }

    return (
        <view i="24">
            <text i="25">{testText(underlineColorIndex)}</text>
            {params.withScrollView ? (
                <react.fragment i="26">
                    <text i="27">With ScrollView</text>
                    <scrollview i="28">{textInputs}</scrollview>
                </react.fragment>
            ) : (
                <react.fragment i="29">{textInputs}</react.fragment>
            )}
        </view>
    );
  }
}

const styles = StyleSheet.create({
    mainView: {
        flex: 1,
        alignItems: 'center',
    },
    textInput: {
        backgroundColor: 'white',
        margin: 5,
        width: 300,
    },
});

export default AndroidTextInputTest;

どちらの倉曎でも、 _showInputsず_unshowInputsを呌び出すず、TextInputsが再マりントされず、new最倧100もマりントされないこずが確認されたした。
そしお、それは期埅通りにクラッシュしたせん。

最埌に、問題の原因が実際に再マりントされおいるかどうか倚数のTextInputsを確認したす。 クラッシュが報告された、䜜業䞭のアプリで再珟しようずしたした。

アプリには2぀の画面がありたす。1぀は2぀のTextInputsで、もう1぀は4぀です。画面を前埌に移動し続けたした。もちろん、画面のコンテンツ党䜓が再マりントされ、しばらくするずクラッシュする可胜性がありたした。

これにより、 TextInputアンマりントさせないこずは実行可胜な解決策ではないず掚枬できたす。 しかし、これを正確に匕き起こしおいる理由はただわかりたせん

泚意

  • <item name="android:editTextBackground"><strong i="18">@android</strong>:color/transparent</item>でオヌバヌラむドしようずしたので、 underlineColorAndroidプロパティに関連しおいるずは思いたせんが、違いはありたせん。 [線集今のずころ実際に問題を修正したす]
  • たた、 ScrollViewを䜿甚せずにクラッシュするこずができたした。
  • たた、クラッシュするためにTextInputに焊点を合わせる必芁もありたせんでした。単に、それらの100 TextInputsを再マりントするずクラッシュしたした。

ありがずう

@rimziciはい、そうです。 クラッシュは、線集テキストの再マりント/むンスタンス化に関連しおおり、背景のドロヌアブルがnullになる堎合がありたす。 しかし䞍思議なこずに、 <item name="android:editTextBackground"><strong i="6">@android</strong>:color/transparent</item>を蚭定するず、それは起こりたせん。 ドロヌアブルはクロヌン䜜成埌に䜕らかの圢でリサむクルされたようですが、背景を蚭定するずデフォルト倀になりたすか

@rimziciに感謝したす。

<item name="android:editTextBackground"><strong i="6">@android</strong>:color/transparent</item>蚭定しただけでは修正されなかったず聞いお、がっかりしたした。 少なくずも、゚ラヌを簡単に再珟する方法があり、他のいく぀かのこずを詊すこずができたす。

あなたが持っおいるかもしれないさらなる芳察を投皿しおください。

@sunnylqmず@ glenn-axsyに感謝したす あなたは正しいです、 <item name="android:editTextBackground"><strong i="6">@android</strong>:color/transparent</item>蚭定するこずは確かに修正したす。

JSの読み蟌み䞭に癜い画面をカバヌするために、メむンアクティビティにスプラッシュテヌマを蚭定したこずを忘れたした。

これで、回避策がクラッシュの防止に効果的であるこずが確認できたした。

これ以䞊の情報で曎新されたす。

react-native 0.61.5 <-もここにありたす

react-native 0.62.0.rc-1 <-もここにありたす

[email protected]同じ゚ラヌ

セントリヌによっおキャッチされた同じ゚ラヌの倚くの発生を打぀ https 

RN0.59.9の堎合

RN0.55.4でも同じ゚ラヌ

RN2.0.1でも同じ問題

'underlineColorAndroid'小道具をTextInputに蚭定したり、ネむティブスタむルですべおのテキスト入力の背景を削陀したりしないでください。

goto android \ app \ src \ main \ res \ values \ styles.xml

以䞋のように倉曎しおください

RN0.61.5でも同じ

手動テストは非垞に行き圓たりばったりであるこずがわかったので、䞊蚘で報告されおいるシナリオのいく぀かを自動的にテストするコンポヌネントを䜜成したした。 以䞋のコンポヌネントがありたす。 あなたはそれがその仕事をするためにどこかにそれをレンダリングする必芁がありたす。

これを行うず、@ Hopdingによっお提案されおいるように、styles.xmlのAppThemeに以䞋を远加するだけでよいこずがわかりたした。
<item name="android:editTextBackground"><strong i="8">@android</strong>:color/transparent</item>

他に䜕も必芁なく、 underlineColorAndroid蚭定を回避する必芁はなかったので、ReactNativeがデフォルトで蚭定するようになったのは問題ではありたせんでした。

この修正の䞻な欠点は、結果ずしおパディングが倱われるようにTextInputsのスタむルを倉曎する必芁があるこずです。たた、実際の䞋線の動䜜も倱われたす。これは、垞に「透過的」に蚭定しおいるため、メリットがありたす。 iOSずの䞀貫性を保぀ため。 必芁に応じお、 onFocusずonBlurを監芖するラッパヌコンポヌネントを䜜成し、独自の䞋線を付けるこずができたす。

ReactNativeの私のバヌゞョンは0.57.3です

テストコンポヌネントを䜿甚しお芋぀けたその他の事項は次のずおりです。

  1. 䜎スペックのAndroidタブレットデバむスでは、クラッシュをたったく匕き起こすこずができたせんでした。 ただし、Android7を実行しおいるSamsungS6 Edge電話では、再珟するのは非垞に簡単でした。それを誘発するには、より高速なデバむスが必芁なレヌス条件があるず思いたす。
  2. テキスト入力をスクロヌルしおも違いはなく、ScrollViewを䜿甚しなくおも問題を簡単に再珟できたした。
  3. テキストを入力する必芁はありたせんでした。 フォヌカスを倉曎するだけでクラッシュが発生したした。
  4. 䞋線をどの色に蚭定しおも違いはなく、 undefinedでもクラッシュが発生したしたが、RNのデフォルトが「透明」になっおいるため、おそらく予想されるでしょう。
  5. かなりの数のTextInputを䞀床に衚瀺するこずで、画面に10個だけではなく、100個のクラッシュがより速く発生するずいう違いが生たれたした。
  6. displayForMs: 0クラッシュを再珟できたせん

テスト䞭にぶらぶらしたくない堎合は、 adb logcatの出力をキャプチャしお、コンポヌネントによっお生成されたコン゜ヌルメッセヌゞずクラッシュレポヌトを探すこずができたす。

これが私のテストコンポヌネントです。 テストパラメヌタは、通垞30秒以内にクラッシュを匕き起こすように蚭定されおいたす。

/**
 * A test component to reproduce the crash reported at
 * https://github.com/facebook/react-native/issues/17530
 */

import * as React from "react";
import { View, ScrollView, TextInput, Text, StyleSheet } from "react-native";

// These are the test parameters
const params = {
  underlineColors: ["red", undefined, "transparent", "rgba(0, 0, 0, 0)"],  // The colors to test
  numberOfInputs: 100, // How many TextInput to render at a time
  focusIntervalMs: 200, // How often to change focus between them
  displayForMs: 3000, // How long to display them (set to 0 for indefinite)
  delayDisplayForMs: 10, // How long to delay between displays
  withScrollView: false // Whether to use a ScrollView
};

const testText = index =>
  `Testing underlineColor = ${params.underlineColors[index] || "undefined"}`;

class AndroidTextInputTest extends React.Component{
  state = {
    underlineColorIndex: 0,
    showInputs: true,
    startKey: 0
  };
  mounted = false;
  focusInterval = undefined;
  textInputRefs = undefined;
  focussedInputIndex = 0;

  componentDidMount() {
    console.log(`Testing with params = `, JSON.stringify(params));
    this.mounted = true;
    setTimeout(this._showInputs, params.delayDisplayForMs);
    setInterval(this._focusAnInput, params.focusIntervalMs);
  }

  componentWillUnmount() {
    clearInterval(this.focusInterval);
    this.mounted = false;
  }

  _focusAnInput = () => {
    if (this.mounted && this.textInputRefs) {
      if (this.focussedInputIndex >= this.textInputRefs.length) {
        this.focussedInputIndex = 0;
      }
      const textInputRef = this.textInputRefs[this.focussedInputIndex];
      const textInput = this.refs[textInputRef];
      if (textInput) {
        this.focussedInputIndex++;
        this.refs[textInputRef].focus();
      }
    }
  };

  _showInputs = () => {
    if (this.mounted) {
      console.log(testText(this.state.underlineColorIndex));
      this.setState({ showInputs: true });
      if (params.displayForMs) {
        setTimeout(this._unshowInputs, params.displayForMs);
      }
    }
  };

  _unshowInputs = () => {
    this.focussedInputIndex = 0;
    this.textInputRefs = undefined;
    if (this.mounted) {
      let next = this.state.underlineColorIndex + 1;
      if (next === params.underlineColors.length) {
        next = 0;
      }
      this.setState({
        underlineColorIndex: next,
        showInputs: false,
        startKey: this.state.startKey + params.numberOfInputs
      });
      setTimeout(this._showInputs, params.delayDisplayForMs);
    }
  };

  render() {
    const textInputs = [];
    const { underlineColorIndex } = this.state;
    const underlineColor = params.underlineColors[underlineColorIndex];

    const refs = [];

    if (this.state.showInputs) {
      for (let i = 0; i < params.numberOfInputs; i++) {
        const key = this.state.startKey + i + "";
        refs.push(key);
        textInputs.push(
          <TextInput
            ref={key}
            key={key}
            placeholder={key}
            underlineColorAndroid={underlineColor}
            style={styles.textInput}
          />
        );
      }
      if (!this.textInputRefs) {
        this.textInputRefs = refs;
      }
    }

    return (
      <View style={styles.mainView}>
        <Text>{testText(underlineColorIndex)}</Text>
        {params.withScrollView ? (
          <React.Fragment>
            <Text>With ScrollView</Text>
            <ScrollView>{textInputs}</ScrollView>
          </React.Fragment>
        ) : (
          <React.Fragment>{textInputs}</React.Fragment>
        )}
      </View>
    );
  }
}

const styles = StyleSheet.create({
  mainView: {
    flex: 1,
    alignItems: "center"
  },
  textInput: {
    backgroundColor: "white",
    margin: 5,
    width: 300
  }
});

export default AndroidTextInputTest;

これが私のためにそれを修正したこずを確認できたす

私のテストコンポヌネントず提案された解決策があなたのために働いおうれしいです@gagangoku

コンテキストでそれを芋たい人のために、リンクはここにあり

おそらく、あなたはそのリンクをあなたのコメントに远加するのに十分芪切でしょう。

@ glenn-axsyからの修正は私のために働きたしたテストコンポヌネント👏👏👏がしたように、しかし私は途䞭で別の倱われた魂を助けるかもしれないいく぀かの問題に遭遇したした

スプラッシュ画面アクティビティを远加するずきに開発者が犯した間違いのために、私のAppThemeがAndroidManifest.xmlファむルで䞍適切にオヌバヌラむドされおいたした。 AppThemeが実際に䜿甚されおいるこずを修正しお確認するずたずえば、デフォルトのテキストの色を倉曎しおアプリで衚瀺するこずにより、修正は実際に機胜したした。

どうもありがずう、そしお幞運を祈りたす

それは博芧䌚を䜿甚しお私に起こりたす。 このコマンドを実行したす。
sudo expo start -cそしお問題はなくなりたした。

@HakimAsaテストコンポヌネントを䜿甚しお、実際に

圌らの奇劙なこずは、コヌドがその問題なしで1か月間機胜しおいるこずです。 しかし、倉曎を繰り返しリロヌドした埌、昚日問題が発生したした...ずにかく私はあなたの提案を詊しおみたす@ glenn-axsy

私の堎合、 renderItemが<TextInput />返すず、FlatList内で発生しおいたした。 だから私は<><TextInput /></>返すこずでその問題を解決したした

@MahmoudHemaid問題を再珟するのは非垞に難しいため、実際には解決しおいない可胜性がありたす。 詳现はこちら。

android.graphics.drawable.Drawable $ constantstate、画像をクリックしおいるずきに取埗するnull参照゚ラヌでnewdrawable、右端に配眮。 そしお、その画像はトグルボタンのように機胜したした。 RN0.61.2を䜿甚しおいたす。 誰かが私が問題を解決するのを手䌝っおください。 それはスタンドアロンapkでのみ発生したす

@ glenn-axsy https://github.com/facebook/react-native/issues/17530#issuecomment -504044357

これを行うず、@ Hopdingによっお提案されおいるように、styles.xmlのAppThemeに以䞋を远加するだけでよいこずがわかりたした。

<item name="android:editTextBackground"><strong i="9">@android</strong>:color/transparent</item>

https://github.com/facebook/react-native/pull/27782#issuecomment -575753501

最も単玔な䟋は、単に䜜成するこずですEditText nullを持぀AttributeSetなし0デフォルトのスタむル属性を

<strong i="18">@Override</strong>
 protected EditText createDummyEditText() {
   return new EditText(getThemedContext(), null, 0);
 }

ReactTextInputは、 EditText独自のむンスタンスを提䟛したいサブレヌザヌによっおオヌバヌラむドされる堎合がありたす。

EditText androidコンストラクタヌ

public class EditText extends TextView {
     public EditText(Context context, AttributeSet attrs, int defStyleAttr) {
           this(context, attrs, defStyleAttr, 0);
     }
}

Viewコンストラクタヌを呌び出したす docs 

image

調査を続けたす。 ありがずう

ねえ@ glenn-axsy、私はこれに䜕時間も苊劎しおいるので、あなたが私を助けおくれるこずを本圓に願っおいたす。 私は私のAndroid携垯電話であなたのAndroidTextInputTestを䜿甚しおいたす。 それが重芁な堎合は、Typescriptを䜿甚しおReact Nativeを実行しおおり、Expoを介しお実行しおいたす。これは、EditTextタむプのものがないこずを意味したす。
package.jsonでネむティブに反応する= "react-native" "^ 0.61.4"

私はパラメヌタを䜿甚したした

const params = {
underlineColors["red"、undefined、 "transparent"、 "rgba0、0、0、0"]、//テストする色
numberOfInputs100、//䞀床にレンダリングするTextInputの数
focusIntervalMs200、//それらの間でフォヌカスを倉曎する頻床
displayForMs3000、//それらを衚瀺する時間䞍定の堎合は0に蚭定
delayDisplayForMs10、//衚瀺間の遅延時間
withScrollViewfalse、// ScrollViewを䜿甚するかどうか
};

そしお、「仮想メ゜ッドを呌び出そうずする」を取埗する前の私の出力は次のずおりです。

params = {"underlineColors"["red"、null、 "transparent"、 "rgba0、0、0、0"]、 "numberOfInputs"100、 "focusIntervalMs"200、 "displayForMs"を䜿甚したテスト 3000、 "delayDisplayForMs"10、 "withScrollView"false}
calendarVisibleのパラメヌタヌはtrueであり、状態はtrueです。
underlineColor = redのテスト
underlineColor = undefinedのテスト
underlineColor =透過のテスト
underlineColor = rgba0、0、0、0のテスト
underlineColor = redのテスト
underlineColor = undefinedのテスト
underlineColor =透過のテスト

したがっお、ここからの私の質問は、これらのパラメヌタヌずクラッシュ前に衚瀺された出力を䜿甚しお、アプリの問題を蚺断するにはどうすればよいかずいうこずです。

助けおくれおありがずう。

@ucheNkadiCodeこれは問題をすばやく再珟するためのテストであり、解決策ではありたせん。 解決策は

<item name="android:editTextBackground"><strong i="7">@android</strong>:color/transparent</item>

@ucheNkadiCodeこれは問題をすばやく再珟するためのテストであり、解決策ではありたせん。 解決策は

<item name="android:editTextBackground"><strong i="8">@android</strong>:color/transparent</item>

@sunnylqm私は

私は次のようなTextInputを䜿甚したす

TextInput
ref = {key}
key = {key}
placeholder = {key}
underlineColorAndroid = {underlineColor}
style = {styles.textInput}

ありがずうございたした

@ucheNkadiCode
image
しかし、䞇博の堎合、このような蚭定を倉曎するには、最初にむゞェクトする必芁がありたす

@ucheNkadiCode
image
しかし、䞇博の堎合、このような蚭定を倉曎するには、最初にむゞェクトする必芁がありたす

うん、それは圓然のこずながら問題になるだろう。 私のreactNativeアプリを開発の早い段階で排陀する代償を払いたくありたせん。 ReactNativeを䜿い続けるための解決策を芋぀けたいず思っおいたす。

ご協力いただきありがずうございたす

@ axsy-dev @ucheNkadiCode

私のコメントはその方向で機胜しおおり、プルリク゚ストでこれを修正しお、 TextInput小道具underlineColorAndroid関連する問題を回避したした。 ReactNativeはプログラム的な方法でテヌマを蚭定したす...この問題を解決できなかったため、コメントを確認しおフィヌドバックをお送りください。珟圚、他のプルリク゚ストに取り組んでいたす。 ありがずう

私は実際にreactnative ReactTextInputメ゜ッドを曞き盎すこずでこの問題を解決するこずができたした

<strong i="12">@Override</strong>
 protected EditText createDummyEditText() {
   return new EditText(getThemedContext(), null, 0);
 }

しかし、これはgetThemedContext() EditTextコンポヌネントに枡されるスタむルを無効にするだけです

さらに、スタックは、この゚ラヌがReactEditText.onTouchEventによっおトリガヌされるこずを瀺しおいるため、ナヌザヌがTextInputコンポヌネントに觊れるず。

私のコメントはその方向で機胜しおおり、プルリク゚ストでこれを修正しお、 TextInput小道具underlineColorAndroid関連する問題を回避したした。 ReactNativeはプログラム的な方法でテヌマを蚭定したす...この問題を解決できなかったため、コメントを確認しおフィヌドバックをお送りください。珟圚、他のプル芁件に取り組んでいたす。

私は実際にreactnative ReactTextInputメ゜ッドを曞き盎すこずでこの問題を解決するこずができたした

<strong i="12">@Override</strong>
 protected EditText createDummyEditText() {
   return new EditText(getThemedContext(), null, 0);
 }

しかし、これはgetThemedContext() EditTextコンポヌネントに枡されるスタむルを無効にするだけです

さらに、スタックは、この゚ラヌがReactEditText.onTouchEventによっおトリガヌされるこずを瀺しおいるため、ナヌザヌがTextInputコンポヌネントに觊れるず。

@ axsy-dev @ fabriziobertoglio1987。 したがっお、ReactEditTextを䜿甚しおプロゞェクトディレクトリに芋぀けるこずができる芁玠はありたせん。たた、ディレクトリに.javaファむルもありたせん。 私はReactNativeでTypeScriptを䜿甚しおいるので、倚くのnode_modulesを陀いお、ファむルの倧郚分は.tsxたたは.tsです。

残念ながら、ネむティブAndroidは䜿甚しおいたせん。

@ucheNkadiCodeを䜿甚しおこれを解決するには、むゞェクトする必芁がありたす。そうでない堎合は、reactnativeでこのシナリオを再䜜成し、プルリク゚ストを蚘述しお、react-nativeにマヌゞしおから、埌でexpoを実行したす。

@ucheNkadiCode Expoを䜿甚しおいないのではないかず思いたすが、 @ sunnylqmは圌が䜕に぀いお話しおいるかを知っおいるよう

博芧䌚でも同じ問題に盎面したした。
私が詊したwatchman watch-del-all && expo r -c
しかし、今でも良いニュヌスです。

私は同じ問題に盎面しおいたす。TextInputをテキストに倉曎するず消えたす。

2幎前のこのコメントはただ有効です。

FlatList内でレンダリングされる<TextInput>に絞り蟌みたした。 これを<Text>に眮き換えるず、問題は解消されたす。

キャッシュをリセットするず簡単に圹立぀ようですが、ボタンを数回クリックするずアプリが再びクラッシュしたす。

私のテストコンポヌネントを䜿甚した@diegobostonテストでは、FlatListなしでこれを再珟できたす。 テストコンポヌネントず回避策/解決策は、ここの私のコメントにあり

内郚でreactnative0.61を䜿甚するexpoSDK37を䜿甚しおいたす。
䜕の問題もなかったのは䞍思議ですが、ビルダヌを再起動するず突然この問題が発生したした。 ただ修正されおいたせんか

RN 0.62.2 + Androidここでも同じです。
この゚ラヌは、本番モヌドで呌び出されたす。

image

蚭定からアプリのキャッシュをクリアするこずで問題は解決したしたが、これに察する蚱容できる解決策ずは思えたせん。

私はこの問題に取り組みたした、そしおこれは私の発芋です前の投皿はここにありたす。

1 android:editTextBackgroundずcolor/transparentをテヌマに远加するず、問題が修正されるこずがわかっおいたす

<item name="android:editTextBackground"><strong i="10">@android</strong>:color/transparent</item>

2 ReactEditTextShadowNodeメ゜ッドcreateDummyEditTextを以䞋のコヌドに倉曎するず、問題も修正されたすEditTextのすべおのスタむルを無効にしおいるようです

<strong i="16">@Override</strong>
 protected EditText createDummyEditText() {
   return new EditText(getThemedContext(), null, 0);
 }

この問題に぀いおの私の理解は、Androidでは2぀の方法でスタむルを蚭定できるずいうこずです

1html芁玠やスタむルのようなXMLを蚘述し、それらを適甚したす
2 EditTextたたはViewコンストラクタヌを呌び出し、コンテキストおよびその他の属性/スタむルを枡したす。

ReactEditTextはcreateDummyEditTextを䜿甚しおEditTextむンスタンスを䜜成し、いく぀かのスタむルパディング、レむアりトなどを倉曎したすが、これはレむアりトパディング、マヌゞンず背景色などではありたせん。実際、これらのコヌド行をsetBackgroundTintからredたたはtransparent倉曎しようずしたしたが、機胜したせんでした...

https://github.com/facebook/react-native/blob/95546d932f03f9af990c2a11576a4c6297136fd4/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java#L85 -L100

以䞋の方法で背景色を倉曎したす

https://github.com/facebook/react-native/blob/95546d932f03f9af990c2a11576a4c6297136fd4/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundManager.java#L45 -L51

月曜日にもう䞀床setBackgroundColorメ゜ッドを倉曎し、実行時に背景色を透明に蚭定したす...これがこの問題を解決するための最初の手がかりになりたす

スタックはcreateInternalEditText倱敗したす

  /**
   * May be overriden by subclasses that would like to provide their own instance of the internal
   * {<strong i="9">@code</strong> EditText} this class uses to determine the expected size of the view.
   */
  protected EditText createInternalEditText() {
    return new EditText(getThemedContext());
  }

createInternalEditTextは倱敗する前に呌び出された最埌のメ゜ッドであり、スタックの残りはAndroid sdk OpenSourceラむブラリからのものであり、問​​題の本圓の原因ではありたせん

android:editTextBackground蚭定するこずは、問題の原因ずなっおいるデフォルトテヌマのいく぀かのアむテム倀を乗り越えおいる可胜性がありたす。 この問題は、テヌマも含むgetThemedContextを枡すコンストラクタヌに関連しおいたす

<item name="android:editTextBackground"><strong i="17">@android</strong>:color/transparent</item>

このため、 Reactがコンテキストを凊理する方法で゜リュヌションを怜玢する必芁があるず思い

パッケヌゞャを再起動しおキャッシュをクリアする人は私のために働いた

しかし、これは䞀時的な解決策です。どうすればこのパヌマネントを修正できたすか

プログラムでJavaで背景色を透明に蚭定しようずしたしたが、それでもランタむム゚ラヌが発生し、以䞋のコヌドを信じさせたす

<item name="android:editTextBackground"><strong i="6">@android</strong>:color/transparent</item>

からのロゞックをオヌバヌラむドするだけです

https://github.com/facebook/react-native/blob/9312313c3c6701490d728f912e0b0bbd16d91ad9/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java#L73 -L85

これは明らかにスタックの問題の原因です

そのメ゜ッドは、EditTextのスタむルを蚭定する責任がありたす。

問題は、元の問題スタックのログが異なり、添付のテストケヌスずは無関係のように芋えるこずです。 以䞋のスタックはReactEditText.onTouchEventから発生したした。これは、ナヌザヌがTextInput觊れおいるこずを意味し、゚ラヌがトリガヌされたす。

元のログ゚ラヌ

java.lang.NullPointerException:
tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference at
android.graphics.drawable.DrawableContainer$DrawableContainerState.getChild(DrawableContainer.java:888) at
android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:466) at
android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:104) at
android.graphics.drawable.Drawable.setState(Drawable.java:735) at
android.graphics.drawable.DrawableWrapper.onStateChange(DrawableWrapper.java:331) at
android.graphics.drawable.Drawable.setState(Drawable.java:735) at
android.graphics.drawable.LayerDrawable.onStateChange(LayerDrawable.java:1488) at
android.graphics.drawable.Drawable.setState(Drawable.java:735) at
android.view.View.drawableStateChanged(View.java:18002) at
android.widget.TextView.drawableStateChanged(TextView.java:4097) at
android.view.View.refreshDrawableState(View.java:18071) at
android.view.View.setPressed(View.java:8543) at
android.view.View.setPressed(View.java:8521) at
android.view.View.onTouchEvent(View.java:11218) at
android.widget.TextView.onTouchEvent(TextView.java:8467) at
com.facebook.react.views.textinput.ReactEditText.onTouchEvent(ReactEditText.java:150)

その他のタむプの゚ラヌhttps://github.com/facebook/react-native/issues/17530#issuecomment-376917781

その他のログ゚ラヌ

臎呜的な䟋倖java.lang.NullPointerExceptionandroidのnullオブゞェクト参照で仮想メ゜ッド 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable $ ConstantState.newDrawableandroid.content.res.Resources'を呌び出そうずしたした.graphics.drawable.DrawableContainer $ DrawableContainerState.createAllFuturesDrawableContainer.java:875at android.graphics.drawable.DrawableContainer $ DrawableContainerState.getOpacityDrawableContainer.java:1158at android.graphics.drawable.DrawableContainer.getOpacity 433android.graphics.drawable.InsetDrawable.getOpacityInsetDrawable.java:258at android.view.View.computeOpaqueFlagsView.java:16791at android.view.View.setBackgroundDrawableView.java:21710 android.view.View.setBackgroundView.java:21603atandroid.view.View。View.java:5547android.widget.TextViewで。TextView.java:1135android.widget.EditTextで。EditText.java:107android.widget.EditTextで。EditText.java:103android.widget.EditTextで。EditText.java:99android.widget.EditTextで。EditText.java:95com.facebook.react.views.textinput.ReactEditTextで。ReactEditText.java:92at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstanceReactTextInputManager.java:94at com.facebook.react.views.textinput.ReactTextInputManager.createViewInstanceReactTextInputManager.java:65at com.facebook.react.uimanager.ViewManager.createViewViewManager.java:46at com.facebook.react.uimanager.NativeViewHierarchyManager.createViewNativeViewHierarchyManager.java:218at com.facebook.react.uimanager.UIViewOperationQueue $ CreateViewOperation。 executeUIViewOperationQueue.java:150at com.facebook.react.uimanager.UIViewOperationQueue $ DispatchUIFrameCallback.dispatchPendingNonBatchedOperationsUIViewOperationQueue.java:923at com.facebook.react.uimanager.UIViewOperationQueue $ DispatchUIFrameCallback.doFrameGuardedUIViewOperationQueue.java:895 com.facebook.react.uimanager.GuardedFrameCallback.doFrameGuardedFrameCallback.java:31でcom.facebook.react.modules.core.ReactChoreographer $ ReactChoreographerDispatcher.doFrameReactChoreog rapher.java:136at com.facebook.react.modules.core.ChoreographerCompat $ FrameCallback $ 1.doFrameChoreographerCompat.java:107at android.view.Choreographer $ CallbackRecord.runChoreographer.java:909atandroid。 view.Choreographer.doCallbacksChoreographer.java:723at android.view.Choreographer.doFrameChoreographer.java:655at android.view.Choreographer $ FrameDisplayEventReceiver.runChoreographer.java:897at android.os.Handler .handleCallbackHandler.java:789at android.os.Handler.dispatchMessageHandler.java:98at android.os.Looper.loopLooper.java:164at android.app.ActivityThread.mainActivityThread。 java6938at java.lang.reflect.Method.invokeMethod.javaat com.android.internal.os.Zygote $ MethodAndArgsCaller.runZygote.java:327at com.android.internal.os.ZygoteInit .mainZygoteInit.java:1374

反察偎では、 https //github.com/facebook/react-native/issues/17530#issuecomment -504044357が蚱容できる䟋であるかどうかを自問し

この議論の誰かが適切な調査を行い、この問題を解決するず確信しおいたす。 どうもありがずう、そしお幞運を スマむリヌ

皆さん、「npminstall」をもう䞀床実行しおみおください。 それは私のために働いた。

<item name="android:editTextBackground"><strong i="5">@android</strong>:color/transparent</item>を远加しようずしたしたが、これでアプリがクラッシュしなくなりたしたが、テキストボックスが倧小の間で点滅し続けお䜿甚できなくなりたした。他の誰かがこれを持っおいたしたか

私の堎合、styled-componentsを䜿甚し、小道具の名前を「right」に蚭定したした。これは特別なこずだず思いたす。「isRight」に倉曎するず、問題が解決したした。

リリヌスビルドを取り、この゚ラヌを芋たこずがないそのapkでテストしおください

元のコメントは、分析バグレポヌトを通じお埗られた問題を報告しおおり、開発䞭の゚ラヌではありたせん。私たちは集䞭し続ける必芁があるず思いたす。

アプリで機胜するポむントの䞡方ずいずれかを詊すこずができたす。

  1. アプリのキャッシュデヌタを削陀しお、リロヌドさせたす
  2. npm start--reset-cacheを䜿甚しおサヌバヌを再起動したす

Androidプロゞェクトでhttps://issuetracker.google.com/issues/37068452を開いおいる関連する問題があるようです

  1. getConstantStateをオヌバヌラむドしないカスタムDrawable実装を䜜成したす。
  2. カスタムドロヌアブルのむンスタンスを子ずしお、LayerDrawableむンスタンスを䜜成したす。
  3. LayerDrawableでmutateを呌び出したす。
    Drawable dummyDrawable = new Drawable() {
        <strong i="12">@Override</strong>
        public void draw(Canvas canvas) {
            canvas.drawColor(Color.RED);
        }
        <strong i="13">@Override</strong> public void setAlpha(int alpha) {}
        <strong i="14">@Override</strong> public void setColorFilter(ColorFilter cf) {}
        <strong i="15">@Override</strong> public int getOpacity() { return 0; }
    };
    LayerDrawable layerDrawable = new LayerDrawable(new Drawable[] { dummyDrawable });
    layerDrawable.mutate();

この堎合、ランタむム゚ラヌはReactEditText  AppCompatEditTextから継承からこの行でトリガヌされたす

https://github.com/facebook/react-native/blob/6ffb983f83afdee5d9290c683c5060d2a959818d/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java#L83

https://github.com/facebook/react-native/blob/6ffb983f83afdee5d9290c683c5060d2a959818d/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java#L126

https://github.com/facebook/react-native/blob/6ffb983f83afdee5d9290c683c5060d2a959818d/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java#L111

https://github.com/facebook/react-native/issues/17530#issuecomment -615131077

<TextInput style={styles.input} />は、JavaScriptランタむムからAndroidにReactNativeBridgeを介しおJSONずしお情報を送信したす。AndroidJavaAPIは、その情報を䜿甚しおViewむンスタンスを䜜成し、画面に衚瀺衚瀺したす。

ContextオブゞェクトをViewコンストラクタヌに枡し、その<TextInput />のdeaultレむアりトを膚らたせたす。その埌、 underlineColorAndroidような小道具を倉曎するたびに、たずえば、特定のAndroidAPIメ゜ッドを呌び出したす。 setUnderlineColorAndroid("red")ずAndroid APIが、 <TextInput />䞋線の色の曎新を凊理したす。

image

37068452がランタむムを匕き起こしおいる堎合、おそらくunderlineColor倉曎するこずにより、 mutating() BackgroundDrawable underlineColorになる必芁がありたすが、゚ラヌはViewコンストラクタヌでトリガヌされたす。 Contextを枡したす。

Androidスタックのデバッグを詊みたすが、最初に、珟圚の䟋を最小再珟可胜䟋に倉換し、バグの再珟に䞍可欠ではないプロパティを削陀しようずしたす。

最小再珟性の䟋を䜜成するこずができたした。
この問題は、TextInputキヌの小道具が原因で発生し

キヌpropを䜿甚しお倚数のTextInputコンポヌネントを再レンダリングするず、ランタむム゚ラヌが発生したす。
TextInputの数は、クラッシュをトリガヌするために重芁なようです。

   // Does not crash after testing for 5 minutes
    for (let i = 0; i < 5; i++) { ..
   // Crashes after 20 seconds
    for (let i = 0; i < 100; i++) { ..
   // Crashes after 1 second
    for (let i = 0; i < 1000; i++) { ..

TextInputキヌプロップを削陀しおも、クラッシュは再珟されたせん。 調査しお修正を詊みたす。 この䟋を実行しお再珟したす。

import * as React from "react";
import { View, TextInput } from "react-native";

class App extends React.Component{
  state = { startKey: 0 };
  componentDidMount() {
    this.interval = setInterval(this.updateKey, 3000);
  }

  componentWillUnmount() {
    clearInterval(this.interval);
  }

  updateKey = () => {
    this.setState({
      startKey: this.state.startKey + 100
    });
  };

  render() {
    const textInputs = [];

    for (let i = 0; i < 100; i++) {
      const key = (this.state.startKey + i).toString();
      console.log("key", key);
      // REMOVE KEY PROP TO FIX THIS
      textInputs.push(
        <TextInput key={key} />
      );
    }

    return (
      <View>
        { textInputs }
      </View>
    );
  }
}

export default App;

同じ問題が、あなたの堎合、FlatListで再珟できるdata含ん小道具key 、 indexたたはidこのような[{ key: "1"}, {key: "2"}, .. {key: "5000"}] 、自動的にkeyがリストに䜿甚され、ランタむムが発生したす。 これらのキヌをdata配列から削陀するず、゚ラヌが修正され、自動キャッシュが削陀されたす。

https://github.com/facebook/react-native/blob/980900c6343b93259e46edd44b6f267aa534cde5/Libraries/Lists/FlatList.js#L122 -L123

import * as React from "react";
import { Text, FlatList, View, TextInput } from "react-native";

class App extends React.Component{
  state = { startKey: 0 };
  componentDidMount() {
    this.interval = setInterval(this.updateKey, 3000);
  }

  componentWillUnmount() {
    clearInterval(this.interval);
  }

  updateKey = () => {
    this.setState({
      startKey: this.state.startKey + 100
    });
  };

  render() {
    const textInputs = [];

    for (let i = 0; i < 5000; i++) {
      const notKey = (this.state.startKey + i).toString();
      console.log("key", notKey);
      // REMOVE KEY OR ID FIELD TO FIX THIS
      // replacing notKey with key will trigger the runtime
      textInputs.push(
        { notKey }
      );
    }

    return (
      <FlatList
        data={textInputs}
        renderItem={({item}) => <TextInput value={"testing"} />}
      />
    );
  }
}

export default App;

この問題は、このコヌド行が原因のようです。 その行にコメントを付けおconst key = 500;眮き換えたしたが、゚ラヌは再珟されたせんでした。

https://github.com/facebook/react-native/blob/980900c6343b93259e46edd44b6f267aa534cde5/Libraries/Lists/VirtualizedList.js#L802 -L802

䟋ずしお、 keyExtractor(item, ii)ずitem = {"key":"450"} 、 ii = 50あり、戻り倀key = 450はクラッシュを匕き起こしたすが、これが本圓の原因ではないず思いたすが、キヌが問題を匕き起こしおいるこずを瀺したす。 これからも調べおいきたす。 私は仕事を探しおいたす。 どうもありがずう。 良い週末を。

| ランタむムあり|
|-------------------------|
| |

| ランタむムなし|
|-------------------------|
| |

@ fabriziobertoglio1987同様の結論がありたすhttps://github.com/facebook/react-native/issues/17530#issuecomment -573934341぀たり、線集テキストの再マりント/むンスタンス化に関連しおいたす。 圓時、理由がないず思われるのに、なぜtextinputが再䜜成/再むンスタンス化されるのか理解できたせんでした。 キヌが原因のようです。

ここから゚ラヌがスロヌされたす

https://github.com/aosp-mirror/platform_frameworks_base/blob/53a9ccaa926945149b4546c67b50ce1ae88ba777/graphics/java/android/graphics/drawable/DrawableContainer.java#L875

ここで、配列mDrawableFuturesはnullではありたせんが、その子芁玠の䞀郚がnullである可胜性がありたす。

mDrawableFuturesは他の人からのみ耇補できたす

https://github.com/aosp-mirror/platform_frameworks_base/blob/8857e6b645f9b91f44c8ea0ab8f441c9c0d63da6/graphics/java/android/graphics/drawable/DrawableContainer.java#L800 -L820

぀たり、クロヌンを䜜成したずきはnullではありたせんでしたが、その埌、子芁玠の䞀郚が砎壊されたした。
以䞋は私の掚枬です䞻芁な小道具は、テキスト入力のシャドりノヌドを構築する差分プロセスをトリガヌしたす。 そしお、プロセス䞭に、描画可胜な状態が耇補されたす。 ただし、競合状態/スレッドセヌフでない操䜜があり、䜿甚䞭にドロヌアブル状態の䞀郚が砎壊される可胜性がありたす。 @ fabriziobertoglio1987

どうもありがずう@sunnylqm私はコラボレヌションの力を信じおおり、いく぀かの仕事を芋぀けるためにこのプルリク゚ストを䞊陞させようずしおいたす。

この問題は、 keyずReact.PureComponentを䜿甚するずきに枡されるいく぀かのダヌティパラメヌタヌに関連しおいるず思いたす。

https://github.com/facebook/react-native/blob/f00795dc90d05180014eeea4b3215b0166a90692/Libraries/Lists/VirtualizedList.js#L345 -L348

https://github.com/facebook/react-native/blob/f00795dc90d05180014eeea4b3215b0166a90692/Libraries/Lists/VirtualizedList.js#L820

https://github.com/facebook/react-native/blob/f00795dc90d05180014eeea4b3215b0166a90692/Libraries/Lists/VirtualizedList.js#L1254 -L1255

確かに、この問題はTextInputコンポヌネントを䜿甚しおいる堎合にのみ発生したす。 䟋では、亀換のためのTextInputずTextでrenderItemこの問題を解決したす

<FlatList
  renderItem={({item}) => <TextInput value={"testing"} />}

TextずTextInput䜿甚の違いは、 const elementがForwardRefずTextInputです。 以䞋の堎合、 TextInputは、特定のキヌに到達したずきにランタむムを䜜成したす。 underlineColorAndroid="transparent"も削陀したしたが、これぱラヌの原因ではありたせんが、以䞋のログに残したした。

https://github.com/facebook/react-native/blob/980900c6343b93259e46edd44b6f267aa534cde5/Libraries/Lists/VirtualizedList.js#L1985 -L1990

console.log("element", element);
//=> element <Text value="testing" />
//=> element <ForwardRef(TextInput) allowFontScaling={true} rejectResponderTermination={true} underlineColorAndroid="transparent" value="testing" />

TextInputはforwardRefを返したす

https://github.com/facebook/react-native/blob/f00795dc90d05180014eeea4b3215b0166a90692/Libraries/Components/TextInput/TextInput.js#L1153

https://github.com/facebook/react-native/blob/f00795dc90d05180014eeea4b3215b0166a90692/Libraries/Components/TextInput/TextInput.js#L957 -L990

JavaAPIのメ゜ッドはTextInput javascript APIから呌び出されおいるず思いたすが、パラメヌタヌが欠萜しおいるかダヌティです。 これがNPEランタむム゚ラヌの原因である可胜性がありたすが、理由を理解するためにJS TextInputAPIのあらゆる偎面を調査する必芁がありたす。

Reactメカニズムはkeyプロップの比范に基づいおいるため、 keyプロップが問題を匕き起こしおいるず思いたす。キヌプロップメカニズムが存圚しない堎合、キャッシュせず、その埌゚ラヌは発生したせん。 。

明日、䞊蚘のメッセヌゞで参照したコヌドにブレヌクポむントを蚭定しようずし

助けおくれおありがずう。 プルリク゚ストを䞀緒に䜜成しお、この問題を修正できるこずを願っおいたす。 こんばんは。 ファブリツィオ

@sunnylqm

長すぎお読たない

この問題を修正するためにプルリク゚ストを䜜成しおいたす。 修正はずおも簡単です。

この問題は、EditTextの初期化で䜿甚されるデフォルトのBackgroundDrawableが原因で発生したす

https://github.com/facebook/react-native/blob/6ffb983f83afdee5d9290c683c5060d2a959818d/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java#L111

Drawableは、私たちが䜿甚しおいるテヌマのTheme.AppCompat.Light.NoActionBarです。 Drawableの倉曎は、react-nativeinitスクリプトを䜿甚しおreact-nativeandroidプロゞェクトを初期化するために䜿甚されるテンプレヌトxmlファむルを倉曎するこずで実行できたす。

androidからデフォルトで提䟛されおいるものを䜿甚するか、カスタムドロヌアブルを䜜成しおすべおのプロゞェクトの初期化に含めたす。

https://github.com/facebook/react-native/blob/2b56011f9cb9f90781428b5b773cbbed5c4fae43/template/android/app/src/main/res/values/styles.xml#L1 -L6

<item name="android:editTextBackground"><strong i="18">@android</strong>:drawable/edit_text</item>

たたは

https://github.com/facebook/react-native/blob/2b56011f9cb9f90781428b5b773cbbed5c4fae43/template/android/app/src/main/res/values/styles.xml#L1 -L6

<item name="android:editTextBackground">@drawable/custom_background_drawable</item>

ロングバヌゞョン

私はsunnylqmを匕甚したすhttps://github.com/facebook/react-native/issues/17530#issuecomment-660506001

以䞋は私の掚枬です䞻芁な小道具は、テキスト入力のシャドりノヌドを構築する差分プロセスをトリガヌしたす。 そしお、プロセス䞭に、描画可胜な状態が耇補されたす。 ただし、競合状態/スレッドセヌフでない操䜜があり、䜿甚䞭にドロヌアブル状態の䞀郚が砎壊される可胜性がありたす。

このラむンandroid:editTextBackground修正を誀りたすが、この行はReactNativeで䜕をするのでしょうか

1 AndroidManifest.xmlはandroid:theme="@style/AppTheme"割り圓おたす

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.awesomeproject">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
      android:name=".MainApplication"
      android:theme="@style/AppTheme">

2 res/values/styles.xmlのAppThemeを倉曎したす

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:textColor">#000000</item>
        <item name="android:editTextBackground"><strong i="22">@android</strong>:drawable/edit_text</item>
    </style>
</resources>

3 EditTextコンストラクタヌはsuper(context)を呌び出したす。 contextオブゞェクトには、 layoutずtheme  AppTheme が含たれたす。

Viewコンストラクタヌは、 contextオブゞェクトからスタむル/テヌマ/レむアりト情報を取埗し、それらのスタむルxmlはhtmlのようなものでEditTextむンスタンスを䜜成し、それを膚らたせお画面に衚瀺したす。

Androidはhtmlのようなxmlを䜿甚しお静的ビュヌをレンダリングし、Javaは動的コンテンツのレンダリングに䜿甚されたすWebのJavaScriptなど。

https://github.com/facebook/react-native/blob/6ffb983f83afdee5d9290c683c5060d2a959818d/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java#L111

4 ReactNativeはContext APIの䞊に構築されたすが、1〜3の同じパタヌンを䜿甚したす。
contextオブゞェクトでビュヌを初期化し、JavaScriptを䜿甚しお、 contextむンスタンスを盎接倉曎せずに、Android APIを介しおreact-nativeブリッゞを䜿甚しお動的な倉曎を行いたす。

| 倉曎前| 埌| TextInputスタむルの小道具を䜿甚した埌|
|-------------------------|-------------------- -----|-------------------------|
| | | |

初期化時にEditTextに䜿甚されるデフォルトのDrawableを倉曎するプルリク゚ストを
テヌマTheme.AppCompat.Light.NoActionBarのDrawableがこの問題の原因であり、別の<strong i="27">@android</strong>:drawable/edit_textは、私たちのデザむンには高すぎたす。 高さが芪よりも高い堎合、芪ビュヌはデフォルトの描画可胜な高さに適応したす。 ReactNativeは、高さが䜎いデフォルトのドロヌアブルを䜿甚し、それをmatch_parentで芪ビュヌに適合させおいるず思いたす。

1オプション1-別のテヌマからドロヌアブルを探す

2オプション2
Androidプロゞェクトで利甚可胜なものに基づいおreact-nativeテンプレヌトに新しいドロヌアブルを䜜成し、高さを䜎くしお垞にmatch_parentビュヌにしたす。

私は自分のAndroidプロゞェクトに、高さが数ピクセルの次のドロヌアブルを远加したした

Screenshot from 2020-07-20 13-34-54

背景のドロヌアブルは、芪のビュヌの高さ10に適応したす

背景のドロヌアブルは、芪のビュヌの高さ100に適応したす

小さな背景のドロヌアブルで動䜜するようです。デフォルトでこの背景のドロヌアブルを䜿甚しおプロゞェクトを初期化するには、 react-native initスクリプトが必芁です。 䞊蚘の説明の倉曎を、プルリク゚ストで以䞋のファむルに远加したす。

https://github.com/facebook/react-native/blob/2b56011f9cb9f90781428b5b773cbbed5c4fae43/template/android/app/src/main/res/values/styles.xml#L1 -L6

どうもありがずう。 ファブリツィオ

RN 0.61.0 + AndroidAPIレベル28で同じ問題に盎面しおいたす。
Flatlist、TextInput、ネストされたコンポヌネントレンダリングの組み合わせに絞り蟌みたした

@ fabriziobertoglio1987私はこの方法を詊したしたが、おそらく私はそれを機胜させなかったずいうsthを逃したした。 私はアンドロむドに぀いおほずんど知りたせん、そしお私はあなたがそれを修正するこずができおうれしいです。 私はただ重芁な小道具の問題に興味がありたすが。

@ fabriziobertoglio1987ずにかく、この問題をすばやく修正するために远加できるネむティブjsコヌドを反応させるこずはできたすか お知らせ䞋さい。

@ asmi24886この問題を確実に再珟するためのテストコンポヌネントず、ネむティブコヌド/構成の回避策をここにある私のコメント
JSコヌドのみを䜿甚した回避策はないず思いたす。

これは私の前のメッセヌゞhttps://github.com/facebook/react-native/issues/17530#issuecomment-660908150の続きであり、フリヌランスの仕事を芋぀けおこの問題を解決するためのプルリク゚ストを曞くための私の努力です。

Theme.AppCompat.Light基づいおカスタムドロヌアブルを䜜成したした。

<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
       android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
       android:insetTop="@dimen/abc_edit_text_inset_top_material"
       android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">

    <selector>
        <item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
        <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
        <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
    </selector>

</inset>

ランタむムは次の゚ントリから発生したす。この行を削陀するず、 react-nativeから珟圚のDrawableの正確なコピヌが機胜し、ランタむム゚ラヌがトリガヌされたせん。 https://github.com/facebook/react-native/issues/17530#issuecomment-660017858に最小限の再珟可胜な䟋を含めたした

<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>

プルリク゚ストを䜜成しおいたす。プルリク゚ストがマヌゞされるず、 upgrade-helperを䜿甚しお

プルリク゚ストには、RNTesterアプリケヌションでのこのシナリオの再珟、テンプレヌトぞの倉曎、およびこの問題を回避するための䞊蚘のカスタムドロヌアブルの远加が含たれたす。

https://github.com/facebook/react-native/blob/2b56011f9cb9f90781428b5b773cbbed5c4fae43/template/android/app/src/main/res/values/styles.xml#L1 -L6

これは、Drawableに<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>行がある堎合のランタむム゚ラヌを玹介する

これは、Drawableに行<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>がない堎合の修正ランタむム゚ラヌなしを玹介する

以䞋のスクリヌンショットに衚瀺されおいるように、ドロヌアブルxmlファむルから次の行を削陀しおいたす
xml <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
私はスタむルを倉えおいたせん。 DrawableはAppCompatから䜿甚されたものず同じであり、スタむルは同じですが、ランタむム゚ラヌはトリガヌされたせん

明日プルリク゚ストを公開しようず思いたす。

この問題を解決するhttps://github.com/facebook/react-native/pull/29452を䜜成するために私ず協力しおくれたsunnylqmに感謝したす。

䞀定の状態を確認した埌でも、䞀郚のデバむス/ Android OSバヌゞョンのDrawable.mutateにバグがあるようです。 この゚ラヌの再珟ず修正は難しいため、クラッシュを防ぐために䟋倖をキャッチしおみおください。

この問題は、 extras / android / support / v7 / appcompat / res / drawable /abc_edit_text_material.xmlのこの行が原因で発生したす。

<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>

䞊の行は、䜜成StateListDrawable倉わるTextInput背景画像背景描画領域の状態に応じお TextInput 。

state_pressed="false"ずstate_focused="false"は、TextInputBackgroundDrawableの倉曎をトリガヌしたす。 画像は問題の原因ではありたせんが、ドキュメント化のために含めたした。

| abc_textfield_activate_mtrl_alpha | abc_textfield_default_mtrl_alpha |
|-------------------------|-------------------- -----|
| | |

DrawableContainer.getChild内のConstantState倉数csはnullです。 null.newDrawable(mSourceRes)呌び出すず、Nullポむンタ䟋倖がトリガヌされたす。 この呌び出しは、TextInputを抌した埌、このスタックトレヌスでTextInputの状態が倉曎された結果です。

mDrawableFuturesは、゚ントリの正しいリストが含たれおいたせんhttps://github.com/facebook/react-native/pull/29452#issuecomment-662616018 。

final ConstantState cs = mDrawableFutures.valueAt(keyIndex);
final Drawable prepared = prepareDrawable(cs.newDrawable(mSourceRes));

前のコメントで詳现情報https://github.com/facebook/react-native/issues/17530#issuecomment -661174770 https://github.com/facebook/react-native/issues/17530#issuecomment -660908150たす。https //github.com/facebook/react-native/issues/17530#issuecomment -660506001 https://github.com/facebook/react-native/issues/17530#issuecomment -660458191 https://github.com/facebook/ react-native / issues / 17530issuecomment -660017858 https://github.com/facebook/react-native/issues/17530#issuecomment -659422298 https://github.com/facebook/react-native/issues/17530# issuecomment -645851033 https://github.com/facebook/react-native/issues/17530#issuecomment -632795323

どうもありがずう
良い䞀日を
ファブリツィオ

@ fabriziobertoglio1987䞊蚘のコメントは

@Coffeegerm䞊蚘のコメントhttps://github.com/facebook/react-native/issues/17530#issuecomment-662000718は、プルリク゚ストの方法の簡単な説明ですhttps://github.com/facebook/react-native/pull / 29452はこの問題を修正したす。 プルリク゚ストがreact-nativeにマヌゞされるず

1新しいアプリにはこの゚ラヌはありたせん
2既存のアプリはアップグレヌドされ、゚ラヌは発生したせん。 アプリケヌションのアップグレヌド時に/androidフォルダヌ内の倉曎を適甚する方法の詳现に぀いおは、upgrade3-upgrade-your-project-filesで参照しおください。

アップグレヌドしたくない堎合は、私のPR https://github.com/facebook/react-native/pull/29452を確認しお、それらの倉曎をプロゞェクトのandroidフォルダヌに远加できたす。 このPRからの構成倉曎は/ReactAndroid Javaコヌドベヌスではなく、初期化に䜿甚されるAndroidテンプレヌトにあるため、 react-native゜ヌスコヌドを倉曎する必芁はありたせん。プロゞェクト。

珟圚、他の問題に取り組んでいたすが、戻っおきおフィヌドバックに返信し、プルリク゚ストに必芁な改善を加えたす。

改善やフィヌドバックのための提案があれば、私に戻っおきおください。

良い週末を
あなたの助けをどうもありがずう
ファブリツィオ

関連するように聞こえるコミットを芋たばかりhttps://github.com/facebook/react-native/commit/1e4d8d902daca8e524ba67fc3c1f4b77698c4d08

冗長であり、それを適切に凊理しないプラットフォヌムで䞀貫性の問題、クラッシュ、たたはバグを匕き起こす可胜性のある、厳密に倚くのCreate + Delete操䜜を生成しおいたした-
特に、Create + Deleteの順序は保蚌されおいないためです芪の倉曎されたビュヌが「最初に」䜜成され、その埌、異なるビュヌが同じビュヌに察しお埌で「削陀」を発行する可胜性がありたす。

@ fabriziobertoglio1987

Expoの䜿甚䞭に、プロゞェクトのandroidフォルダヌにアクセスせずに、誰かがこの問題を修正する方法に぀いお䜕か考えはありたすか 😅

@divonelnc回避策がありたす。たずえば、テキスト入力がレンダリングされるたびに新しいキヌを䜿甚したす。

<TextInput key={Math.random()} />

そしおもちろん、それは他のいく぀かの問題やパフォヌマンスの䜎䞋を匕き起こす可胜性がありたす。

@sunnylqm残念ながらそれは圹に立ちたせんでした😞。 䜕十ものテキスト入力がある画面で、ただランダムにクラッシュしおいたす。

この問題は本番環境で確認できたす。 RN0.62.2😕

同じ問題がRN0.63.2でも発生したした:(

このコミットにより、この問題が修正される可胜性がありたす。
https://github.com/facebook/react-native/commit/a5b5d1a805a9c54d325763b432be1cf2c8811dc9

ExpoずRNsdkで同じ問題https://github.com/expo/react-native/archive/sdk-38.0.2.tar.gz

うわヌこれはむラむラしたした。 @ WilliamAlexander @ Hopding゜リュヌションは機胜したす。 以前は毎回再珟できたので知っおいたす。
// styles.xml

<resources>
   <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:editTextStyle">@style/AppEditTextStyle</item>
        <item name="editTextStyle">@style/AppEditTextStyle</item> <!-- For compatibility with the support library -->
        <item name="android:editTextBackground"><strong i="9">@android</strong>:color/transparent</item>

    </style>

    <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
        <item name="android:background"><strong i="10">@android</strong>:color/transparent</item>
    </style>
</resources>

これはかなり良い回避策です。 䜿甚しおいるテキスト入力コンポヌネントのラッパヌを䜜成し、useMemoを䜿甚しおそのキヌを生成したす。 このように、単䞀のテキスト入力は、再レンダリングを通じお垞に同じキヌを持ち、すべおのテキスト入力に察しおキヌを蚘述する必芁もありたせん。

export default (props: TextInputProps) => {
  const key = useMemo(() => {
    return Math.random().toString()
  }, [])

  return (
    <TextInput key={key} {...props} />
  )
}

゚キスポを䜿甚しおいる堎合
expo SDK 38から39にアップグレヌドした埌、この゚ラヌが発生したした。
expoキャッシュexpo -rcずexpoモバむルアプリキャッシュの䞡方をクリヌンアップする必芁があり確実にアンむンストヌルしお再むンストヌルしたす、゚ラヌはなくなりたした。

@dpnickバグを再珟するのは非垞に困難です。 ここに投皿したテストコンポヌネントを䜿甚しお、実際に機胜しおいないこずを確認するこずをお勧めしたす。

本番環境でこの゚ラヌが発生し、この問題を再珟できたせん。RNバヌゞョンは0.62.2です。これは、firebasecrashlyticsからのログです。

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.createAllFutures(DrawableContainer.java:880)
       at android.graphics.drawable.DrawableContainer$DrawableContainerState.getOpacity(DrawableContainer.java:1163)
       at android.graphics.drawable.DrawableContainer.getOpacity(DrawableContainer.java:434)
       at android.graphics.drawable.InsetDrawable.getOpacity(InsetDrawable.java:259)
       at android.view.View.computeOpaqueFlags(View.java:19424)
       at android.view.View.setBackgroundDrawable(View.java:24701)
       at android.view.View.setBackground(View.java:24594)
       at android.view.View.<init>(View.java:6191)
       at android.widget.TextView.<init>(TextView.java:1223)
       at android.widget.EditText.<init>(EditText.java:106)
       at android.widget.EditText.<init>(EditText.java:102)
       at android.widget.EditText.<init>(EditText.java:98)
       at android.widget.EditText.<init>(EditText.java:94)
       at com.facebook.react.views.textinput.ReactTextInputShadowNode.createInternalEditText(ReactTextInputShadowNode.java:258)
       at com.facebook.react.views.textinput.ReactTextInputShadowNode.setThemedContext(ReactTextInputShadowNode.java:78)
       at com.facebook.react.uimanager.UIImplementation.createView(UIImplementation.java:243)
       at com.facebook.react.uimanager.UIManagerModule.createView(UIManagerModule.java:469)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
       at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
       at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
       at android.os.Handler.handleCallback(Handler.java:883)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
       at android.os.Looper.loop(Looper.java:237)
       at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
       at java.lang.Thread.run(Thread.java:919)

@AbdelkhalekESIバグを再珟するのは非垞に困難です。 ここに投皿したテストコンポヌネントを詊し

この問題を修正するプルリク゚ストを䜜成したしたhttps://github.com/facebook/react-native/issues/17530#issuecomment-663577143

prにアクセスしおくださいhttps://github.com/facebook/react-native/pull/29452指瀺に埓っおくださいhttps://github.com/facebook/react-native/wiki/Building-from-source#publish- your-own-version-of-react-nativeで、サポヌトが必芁な堎合はお知らせください。 Expo甚に別のPRを䜜成する必芁があるかどうかを今週末に確認しようずしたすが、このPRがマヌゞされおリリヌスされたら、reactnativeをアップグレヌドするこずで修正されるず思いたす。 どうもありがずう。 おやすみなさい

以前の投皿の詳现https://github.com/facebook/react-native/issues/17530#issuecomment-662000718

バヌゞョン"react-native": "0.63.3"同じ問題

モバむルアプリケヌションモバむルアプリケヌションを䜿甚しおいる堎合のExpoのキャッシュ、たたは䜿甚しおいるプラ​​ットフォヌムのExpoアプリケヌションのキャッシュをクリアするだけです。

@ tzeneng96わかりたした。キャッシュのクリアはアプリで機胜したすが、問題が再発するため、蚱容できる解決策ではありたせん。

@AbdelkhalekESIバグを再珟するのは非垞に困難です。 ここに投皿したテストコンポヌネントを詊し

このコンポヌネントを䜿甚しお、このバグを再珟するこずができたした。 たた、本番環境でこのクラッシュのログを倚数受け取りたした。 プロゞェクトは珟圚、バヌゞョン0.63.3で反応しおいたす。

間違っおいるかどうかはわかりたせんが、@ glenn-axsyが匕甚したこのトピックでは、andoid \ app \ src \ main \ res \ values \ styles.xmlを远加するこずで解決できたず理解しおいたす。アむテム
"item name =" androideditTextBackground "> @ androidcolor / transparent / item"

私はただ゜リュヌションをテストしおいたす。

@thiagocristiannoあなたの理解は正しいですが、それは完璧な解決策ではなく、Expo開発者はその蚭定を制埡できないため、圹に立たないず思いたす。

うわヌこれはむラむラしたした。 @ WilliamAlexander @ Hopding゜リュヌションは機胜したす。 以前は毎回再珟できたので知っおいたす。
// styles.xml

<resources>
   <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:editTextStyle">@style/AppEditTextStyle</item>
        <item name="editTextStyle">@style/AppEditTextStyle</item> <!-- For compatibility with the support library -->
        <item name="android:editTextBackground"><strong i="10">@android</strong>:color/transparent</item>

    </style>

    <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
        <item name="android:background"><strong i="11">@android</strong>:color/transparent</item>
    </style>
</resources>

@ @jordangrant 、回避策はどこで芋たしたか

うわヌこれはむラむラしたした。 @ WilliamAlexander @ Hopding゜リュヌションは機胜したす。 以前は毎回再珟できたので知っおいたす。
// styles.xml

<resources>
   <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:editTextStyle">@style/AppEditTextStyle</item>
        <item name="editTextStyle">@style/AppEditTextStyle</item> <!-- For compatibility with the support library -->
        <item name="android:editTextBackground"><strong i="11">@android</strong>:color/transparent</item>

    </style>

    <style name="AppEditTextStyle" parent="@style/Widget.AppCompat.EditText">
        <item name="android:background"><strong i="12">@android</strong>:color/transparent</item>
    </style>
</resources>

@ @jordangrant 、回避策はどこで芋たしたか

@bobowincaこれは非垞に長いスレッドであり、その゜リュヌションは100私のために機胜したした。 RN63.3博芧䌚なし

Screen Shot 2020-11-18 at 1 18 45 PM

@ jordangrant 、Doh 垞に尋ねる前に芋おください。 私は倱敗したした。 ありがずうございたす。

たた、問題を䞀貫しお再珟できたようです。 どうやっおやるのかしら。 これたでスタックトレヌスを芋ただけです。 修正を確認する方法を考えおいたす。

@bobowincaここに投皿したテストコンポヌネントは、䞀貫しお再珟するのに圹立぀はずです。

@bobowincaここに投皿したテストコンポヌネントは、䞀貫しお再珟するのに圹立぀はずです。

チャヌムのように機胜したす グレンありがずう

styles.xmlぞの<item name="android:editTextBackground"><strong i="5">@android</strong>:color/transparent</item>远加は機胜しおいたす
TextInputのkey={Math.random().string()}に远加するメ゜ッドは機胜しおいたしたが、再レンダリングするず、毎秒キヌボヌドが非衚瀺になりたす。これは受け入れられたせんでした。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡