I get the error above and don't have really an idea why. I am developing a camera app and now a error occurs. Possibly a textureView is causing the error. That's the Exception:
example.com.view.CameraActivity : Only the original thread that created a view hierarchy can touch its views.
java.lang.RuntimeException
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7101)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1137)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:5254)
at android.view.View.invalidateInternal(View.java:13669)
at android.view.View.invalidate(View.java:13633)
at android.view.View.invalidateParentIfNeeded(View.java:13822)
at android.view.TextureView.setTransform(TextureView.java:483)
at example.com.data.BasicFragment.configureTransform(BasicFragment.java:850)
at example.com.data.BasicFragment.access$100(BasicFragment.java:69)
at example.com.data.BasicFragment$2.onOpened(BasicFragment.java:182)
at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:134)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:173)
at android.os.HandlerThread.run(HandlerThread.java:61)
03-20 20:07:18.531 25889-26077/example.com.kamera E/AndroidRuntime: FATAL EXCEPTION: CameraBackground
Process: example.com.kamera, PID: 25889
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7103)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1137)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:5254)
at android.view.View.invalidateInternal(View.java:13669)
at android.view.View.invalidate(View.java:13633)
at android.view.View.invalidateParentIfNeeded(View.java:13822)
at android.view.TextureView.setTransform(TextureView.java:483)
at example.com.data.BasicFragment.configureTransform(BasicFragment.java:850)
at example.com.data.BasicFragment.access$100(BasicFragment.java:69)
at example.com.data.BasicFragment$2.onOpened(BasicFragment.java:182)
at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:134)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:173)
at android.os.HandlerThread.run(HandlerThread.java:61)
Do you know what causes this error? Line 850 is the following one: mTextureView.setTransform(matrix);. Why do I get an error here?
I'm not Android developer but problem you encounter looks similar to the problem with Swing UI - there you also can't just modify some UI component directly from another thread. From another thread you must use invokeLater() to do this so the Swing dispatcher thread will execute task you want by itself. The reason is that if two threads will write to the same variables at the same time then some hard to track concurrency errors can occurs. Therefore problem what do you encounter looks exactly as the Exception say: "Only the original thread that created a view hierarchy can touch its views". Try to find similar mechanism to the invokeLater() in the view technology you use.