web-dev-qa-db-ja.com

ヌガーでjava.lang.NullPointerException

私のアプリは、さまざまなAndroidバージョンで順調に進んでいます。ユーザーはAndroid 4.3、5.0、5.1、6.0で問題なく実行しています。ただし、 S7Edgeを使用しているユーザーがAndroid 7.0で更新され、テキストがEditTextフィールドに貼り付けられるとアプリがクラッシュします(これは、このアプリで行う最初で唯一のことです-起動しますボックスにテキストを貼り付けると、アプリがテキストを解析します)。

Null Pointer Exceptionsに関する多くのスレッドを調べ、Editor.Javaのソースを調べましたが、明らかなことは何もありません。以下のスタックトレースは、私のコードに問題がないことを示しています。これを引き起こしている可能性のある7.0で変更されたアイデアはありますか?

Java.lang.NullPointerException: Attempt to invoke virtual method 'boolean Android.widget.Editor$SelectionModifierCursorController.isDragAcceleratorActive()' on a null object reference
at Android.widget.Editor.updateFloatingToolbarVisibility(Editor.Java:1520)
at Android.widget.Editor.onTouchEvent(Editor.Java:1475)
at Android.widget.TextView.onTouchEvent(TextView.Java:10024)
at Android.view.View.dispatchTouchEvent(View.Java:10725)
at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:2865)
at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:2550)
at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:2865)
at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:2550)
at Android.widget.ScrollView.dispatchTouchEvent(ScrollView.Java:738)
at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:2865)
at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:2550)
at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:2865)
at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:2550)
at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:2865)
at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:2550)
at com.Android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.Java:505)
at com.Android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.Java:1863)
at Android.app.Activity.dispatchTouchEvent(Activity.Java:3226)
at com.Android.internal.policy.DecorView.dispatchTouchEvent(DecorView.Java:467)
at Android.view.View.dispatchPointerEvent(View.Java:10954)
at Android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.Java:5051)
at Android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.Java:4908)
at Android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.Java:4439)
at Android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.Java:4492)
at Android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.Java:4458)
at Android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.Java:4591)
at Android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.Java:4466)
at Android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.Java:4648)
at Android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.Java:4439)
at Android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.Java:4492)
at Android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.Java:4458)
at Android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.Java:4466)
at Android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.Java:4439)
at Android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.Java:6936)
at Android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.Java:6875)
at Android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.Java:6836)
at Android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.Java:7046)
at Android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.Java:185)
at Android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at Android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.Java:176)
at Android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.Java:7010)
at Android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.Java:7073)
at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:927)
at Android.view.Choreographer.doCallbacks(Choreographer.Java:702)
at Android.view.Choreographer.doFrame(Choreographer.Java:632)
at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:913)
at Android.os.Handler.handleCallback(Handler.Java:751)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:154)
at Android.app.ActivityThread.main(ActivityThread.Java:6688)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1468)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1358)
17
Gavin

削除して解決しました

MyEditText.setMovementMethod(new ScrollingMovementMethod());

6
B J

これは、コピー&ペーストメニューがどのような形、形、形式でも表示されないようにする方法です。このバグは本当に私を夢中にさせました、そして他のサムスンのバグと同じようにあなたは彼らのコードでそれを知っていますが、彼らがすぐにそれを修正しないことも知っています。とにかく、ここにワンダーウォールがあります...

  1. Android.Build.Model.toLowerCase()。startsWith( 'sm-g930')かど​​うかを確認します。文字列全体と一致しないでください。最後の文字はマイナーバージョン識別子です。このブール値を、後で表示されるshouldBlockCopyPaste変数に格納しました。

  2. 一致する場合は、コピー&ペーストメニューの表示をブロックします。これはあなたが実際にそれをする方法です!!!

これらの2つの関数をオーバーライドすると、shouldBlockCopyPasteブール値に気付くでしょう。これは、他のデバイスがブロックされないようにするためです。

   @Override
   public ActionMode StartActionMode (ActionMode.Callback callback){
      if (shouldBlockCopyPaste) {
        return null;
      } else {
        return super.StartActionMode(callback);
      }
    }

   @Override
   public ActionMode StartActionMode (ActionMode.Callback callback, int type){
      if (shouldBlockCopyPaste) {
        return null;
      } else {
        return super.StartActionMode(callback, type);
      }
    }
5
self.name

私のアプリでSamsungデバイスからこのクラッシュが発生するのをしばらく見ました。 TextViewを長押しすると、これらのデバイスでコピーと貼り付けメニューが表示され、ユーザーはテキストを貼り付けることもできました(ただし、EditTextコンポーネントではありません)。結局、原因のTextViews(最も重要なのはlongClickable)のXMLですべてのタイプの対話を無効にし、クラッシュは解消されませんでした。

 <TextView
...
    Android:longClickable="false"
    Android:clickable="false"
    Android:linksClickable="false" />
0
N M