Ошибка приложения. Соединение с сервером было неудачным. (Файл: ///android_asset/www/index.html)


157

Приложение умирает при запуске (соединение с сервером было неудачным)

У меня есть приложение для Android, которое я пишу, используя PhoneGap BUILD. Раньше приложение работало нормально, но теперь кажется, что я получаю эту ошибку после уточнения своего приложения (только некоторые изменения пользовательского интерфейса)

1) Когда я запускаю приложение, я (обычно) получаю:

Ошибка приложения. Соединение с сервером было неудачным. (Файл: ///android_asset/www/index.html)

Извините, если это дублирование любого вопроса. Я видел некоторые подобные вопросы здесь, но я не мог найти идеальный ответ или решение. Как и в моем случае, он работал нормально до последних изменений.

Ответы:


73

Как вы сказали, есть много повторяющихся вопросов на одну и ту же тему. Любой, как объяснить вашу ситуацию.

Проблема может быть решена добавлением таймаута для вызова вашего index.html

т.е. вам нужно добавить super.setIntegerProperty("loadUrlTimeoutValue", 70000);в ваш файл activity.java (внутри src / com / yourProj / - / youractivity.java) над этой строкой: super.loadUrl("file:///android_asset/www/index.html");

Объяснение:

Это может произойти по следующим причинам

Основная причина: проблема, вероятно, связана со скоростью эмулятора, поэтому сеть слишком медленная, чтобы своевременно завершить связь.

Это может быть связано с:

  1. Ваш код / ​​данные / изображение имеют слишком большой размер (я полагаю, что в вашем случае вы используете некоторые изображения, так как вы сказали, что внесли некоторые изменения в пользовательский интерфейс, возможно, размер изображений велик)
  2. Ваш сценарий может иметь бесконечный или длинный цикл, поэтому загрузка его занимает слишком много времени.
  3. Вы будете использовать слишком много скриптов (jQuery, iscroll, и т. Д. И т. Д., Больше плагинов или скриптов)

7
В моем случае произошло то, что у меня все еще был тег сценария, указывающий на локальный экземпляр Weinre. Weinre не был запущен. Отсюда - таймауты.
Деманьяк

Я создаю приложение, используя phonegap через devgirl.org/2013/07/17/… этот учебник. Не могли бы вы сказать мне, где я должен этот setIntegerproperty.
Ашока Мондал

40
-1 «проблема скорее всего из-за скорости эмулятора, поэтому сеть слишком медленная» - неправдоподобно, так как сеть не задействована! Этот URL-адрес для локального ресурса Android.
Крис Страттон

я добавил это в свой конфигурационный файл, но он не работает на Nexus 5x
Sa E Chowdary

183

В вашем файле config.xml добавьте эту строку:

<preference name="loadUrlTimeoutValue" value="700000" />

6
Вы должны также описать это
Рохит Гупта

13
Для всех, кто интересуется: это количество времени в миллисекундах, которое ожидалось при загрузке страницы, прежде чем выдать
Седрик Рейхенбах,

13
<preference name="loadUrlTimeoutValue" value="120000" />лучше по сравнению с 700000, я имею в виду, что если ваше приложение не запускается через две минуты, значит, что-то не так (и вы должны исправить это, используя другое решение). Конечно, вы не хотите ждать около 11 минут, чтобы увидеть, запускается ли приложение или нет! (Именно поэтому у нас действительно есть концепция тайм-аута, верно? :-)) Согласно документу, значение по умолчанию составляет 20000 (20 секунд)
СидМорад

я добавил это в свой конфигурационный файл, но он не работает на Nexus 5x
Sa E Chowdary

Это так странно. У меня было установлено 70000, и приложения умирали примерно через 30 секунд после попытки загрузки. Я изменил его на 120000, и теперь они успешно загружаются в течение 3-4 секунд. Это все, что я изменил. Argh.
Брайан Кноблаух

24

Вот рабочее решение

создать новую страницу main.html

пример:

<!doctype html>
<html>
  <head>
   <title>tittle</title>
   <script>
     window.location='./index.html';
   </script>
  </head>
  <body>
  </body>
</html>

изменить следующее в mainactivity.java

super.loadUrl("file:///android_asset/www/index.html");

в

super.loadUrl("file:///android_asset/www/main.html");

Теперь создайте свое приложение, и оно работает на любом медленном соединении

ссылка .

ПРИМЕЧАНИЕ. Это обходной путь, который я нашел в 2013 году.


3
На самом деле вы просто переименовываете свой index.html и создаете main.html с помощью window.location = './index.html'. Не нужно менять super.loadUrl с MainActivity.java
М.Саломаа,

4
Тот же эффект! Но ваша фактическая страница будет изменена на main.html. Но я хочу, чтобы моя страница была index.html.BTW, я думаю, что ваш комментарий неправильный. Вам нужно переименовать index.htmlв main.htmlи создать index.htmlстраницу, а затем добавить window.location = './main.html'. на index.htmlстранице Это должно работать.
Робин С Самуэль,

Да, вы правы! Я пропустил это: DI имел в виду, что создать index.html с window.location = './main.html'. :)
М.Саломаа

Почему ваша настоящая страница должна быть index.html?
М.Саломаа

1
@madebydavid Я ответил на это 4 года назад. На тот момент не было надежных решений для обработки задержки, вызванной тем, что загружается много сценариев. Так что приложение зависало, так как скрипты задерживали загрузку страницы. Это работает, потому что main.htmlон легкий и не имеет скриптов для загрузки, тем самым быстрее инициализирует приложение и затем загружает скрипты index.html. Закрытие </head>было опечаткой, добавлено сейчас.
Робин С Самуил

10

Удалите удаленно связанные файлы jQuery, такие как: https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

Вместо этого загрузите этот файл и загрузите его из локальной папки js, создав URI:

js/jquery.min.js


6

Удалите внешние скрипты в вашем index.html

Изменить это:

<script src="http://code.highcharts.com/highcharts-more.js"></script>

в

<script src="project_folder/highcharts-more.js"></script>

5

У меня была похожая проблема, и на основе вышеупомянутых предложений я сначала добавил "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);" но это не помогло. Поэтому я попробовал Project -> Clean, это сработало, и теперь я могу запустить приложение!

Авинаш ...


5

Попробуй это,

1. Переименуйте ваш index.html в «main.html».

2. Создайте новый «index.html» и поместите в него следующее содержимое:

<!doctype html>
<html>
  <head>
   <title>tittle</title>
   <script>
     window.location='./main.html';
   </script>
  <body>
  </body>
</html>

3. Восстановите свое приложение! Больше ошибок нет!


и что мне делать, если мне нужно добавить некоторые аргументы, такие как main.html? USER = xxx & SESSION = xxx?
Nourdine Alouane

3
window.location.href = "./ main.html? USER = xxx & SESSION = xxx"
Нитин Кришнан П

Кордовы и плагины не вводятся в main.html
viskin

Я добавил этот код, но в течение примерно 1 минуты после всплеска появляется белый экран. Что я должен делать?
Anjana

4

У меня было то же самое на моем проекте.

Я попытался "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);" но безрезультатно.

Я удостоверился, что все файлы были связаны правильно [CSS, JS файлы и т. Д.], Проверил HTML с помощью валидатора w3c [ http://validator.w3.org/#validate_by_upload ] и очистил проект [Project -> Clean]

Теперь он загружается и выполняется без той же ошибки.

Надеюсь это поможет


4

Расширение лимита времени загрузки не решит проблему, вызвавшую ошибку, а только позволит избежать показа сообщения системой, но это повлияет на производительность.

Фактическая причина: вы можете связывать файлы или изображения с удаленными местами, и эти ресурсы загружаются слишком долго. (это, вероятно, самая распространенная ошибка)

Окончательное решение: переместите все необходимые сценарии, изображения и CSS в некоторые локальные папки и загрузите их локально ...

Производительность будет увеличена, а ошибка будет эффективно решена.


4

исправляя это на ионном приложении, просто добавьте

<preference name="loadUrlTimeoutValue" value="700000" />

в ваш файл config.xml сразу после этой строки

<platform name="android">

3

Проверьте свой index.htmlфайл. Если вы используете внешние ресурсы, которые недоступны при запуске приложения, вы можете получить эту ошибку.

В моем случае я забыл удалить ссылку на скрипт отладчика (weinre).

<script src="http://192.168.0.102:8080/target/target-script-min.js#anonymous"></script>

Так что приложение работало на эмуляторе, потому что http://192.168.0.102:8080/было на моем локальном хосте и доступно для эмулятора.

Но когда я настраивал приложение на мобильном телефоне, у меня была та же ошибка, потому что 192.168.0.102 не был доступен из мобильной сети.


1

В моем случае я использую ionic, и я просто закрыл диалог, перешел к приложениям в эмуляторе и запустил мое приложение оттуда. Это сработало. Я понял это отсюда, потому что это был просто вопрос времени ожидания.


1

Если вы используете визуальную студию. После изменения config.xml иногда это нужно

решение для чистой сборки перестройте ваше приложение

Это работает для меня.



1

Я столкнулся с той же проблемой. Я заметил, что в моем индексе была функция «на устройстве готова» и «document.ready», поэтому удаление одного из них решило мою проблему :)


-8

Другая причина, по которой может возникнуть эта ошибка: нет index.htmlв .../YourApp/www/!

Я просто следовал ионному руководству , и один из шагов:

$ rm www/index.html

На iOS это не проблема, так как во время сборки компилятор использует некий HTML по умолчанию. Тем не менее, при сборке для Android, НЕТ пример index.htmlне используется. Мне понадобилось время, чтобы узнать («ПОЧЕМУ это работает на iOS, но не на Android ...?)

Простое решение: создать index.html, сохранить его под .../YourApp/www, перестроить ... и вуаля!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.