Мое приложение Android, отвечающее за реакцию, падает с ошибкой ExecutionException
.
«Не удалось подключиться к серверу разработки».
Метод, который дает сбой, - ReactInstanceManagerImpl.createReactContext()
.
Но это не обычная ошибка, как показано на этом снимке экрана:
Logcat показывает мне эту трассировку стека:
Exception in native call from JS
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException:
Could not connect to development server.
at com.facebook.react.ReactInstanceManagerImpl.createReactContext(ReactInstanceManagerImpl.java:860)
at com.facebook.react.ReactInstanceManagerImpl.access$700(ReactInstanceManagerImpl.java:98)
at com.facebook.react.ReactInstanceManagerImpl$ReactContextInitAsyncTask.doInBackground(ReactInstanceManagerImpl.java:194)
...
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException:
at com.facebook.react.common.futures.SimpleSettableFuture.get(SimpleSettableFuture.java:68)
at com.facebook.react.ReactInstanceManagerImpl.createReactContext(ReactInstanceManagerImpl.java:831)
... 9 more
Caused by: java.lang.RuntimeException:
at com.facebook.react.bridge.ReactBridge.loadScriptFromFile(Native Method)
at com.facebook.react.bridge.JSBundleLoader$2.loadScript(JSBundleLoader.java:58)
at com.facebook.react.bridge.CatalystInstanceImpl.runJSBundle(CatalystInstanceImpl.java:148)
at com.facebook.react.ReactInstanceManagerImpl$4.call(ReactInstanceManagerImpl.java:851)
...
Это говорит о том, что сервер отправил код javascript обратно на устройство, и ReactBridge.loadScriptFromFile()
каким-то образом не может обработать пакет.
Моменты для уточнения:
- это происходит на эмуляторе и устройстве (подключенном через USB)
- это происходит в Linux (Mint) и Windows (8.1)
- Я запустил
adb reverse tcp:8081 tcp:8081
по обычному совету - Я запустил
react-native start
и упаковщик/сервер работает - устройство ДЕЙСТВИТЕЛЬНО подключается к серверу разработки, так как это регистрируется в окне упаковщика
- URL-адрес, который нажимает устройство, возвращает данные, что можно увидеть, скопировав его в адресную строку браузера.
Чем это отличается от обычного сообщения "Не удалось подключиться..."?
Вот скриншот того, что происходит, когда сервер законно не работает:
Различия включают в себя:
- нет
ExecutionException
илиRuntimeException
перед сообщением об ошибке - дополнительная ясность с предоставлением URL-адреса, который был вызван на сервере
- ошибка исходит от
DevServerHelper.onFailure()
Logcat показывает, что трассировка стека в этом нормальном ожидаемом случае сильно отличается:
Unable to download JS bundle
com.facebook.react.devsupport.DebugServerException:
Could not connect to development server.
at com.facebook.react.devsupport.DevServerHelper$1.onFailure(DevServerHelper.java:196)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:140)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)