Błąd aplikacji - połączenie z serwerem nie powiodło się. (plik: ///android_asset/www/index.html)

157

Aplikacja ginie podczas uruchamiania (połączenie z serwerem nie powiodło się)

Mam aplikację na Androida, którą piszę za pomocą PhoneGap BUILD. Wcześniej aplikacja działała dobrze, ale teraz wygląda na to, że pojawia się ten błąd po udoskonaleniu mojej aplikacji (tylko niektóre zmiany interfejsu użytkownika)

1) Kiedy uruchamiam aplikację, (zwykle) otrzymuję:

Błąd aplikacji - połączenie z serwerem nie powiodło się. (plik: ///android_asset/www/index.html)

Przepraszamy, jeśli jest to powtórzenie jakiegokolwiek pytania. Widziałem tutaj kilka podobnych pytań, ale nie mogłem znaleźć idealnej odpowiedzi lub rozwiązania. Tak jak w moim przypadku działało dobrze aż do moich ostatnich zmian.

gitsitgo
źródło

Odpowiedzi:

73

Jak powiedziałeś, istnieje wiele zduplikowanych pytań na ten sam temat. Każdy, jak wyjaśnić twoją sytuację.

Problem można rozwiązać, dodając limit czasu na wywołanie pliku index.html

tzn. musisz dodać super.setIntegerProperty("loadUrlTimeoutValue", 70000);w swoim pliku activity.java (wewnątrz src / com / yourProj / - / youractivity.java) powyżej tej linii: super.loadUrl("file:///android_asset/www/index.html");

Wyjaśnienie:

Może się tak zdarzyć z następujących powodów

Główny powód: problem jest prawdopodobnie spowodowany szybkością emulatora, więc sieć jest zbyt wolna, zakończ komunikację w odpowiednim czasie.

Może to być spowodowane:

  1. Twój kod / dane / obraz ma zbyt duży rozmiar (myślę, że w twoim przypadku używasz niektórych obrazów, ponieważ powiedziałeś, że wprowadziłeś pewne modyfikacje interfejsu użytkownika, może to oznaczać, że rozmiar obrazów jest wysoki)
  2. Twój skrypt może mieć nieskończoną lub długą pętlę, więc ładowanie zajmuje zbyt dużo czasu.
  3. Będziesz używać zbyt wielu skryptów (jQuery, iscroll itp., Itp. Więcej wtyczek lub skryptów)
AnhSirk Dasarp
źródło
7
W moim przypadku nadal miałem tag script wskazujący na lokalną instancję Weinre. Weinre nie biegł. Stąd - limity czasu.
demaniak
Tworzę aplikację używając phonegap poprzez devgirl.org/2013/07/17/ ... ten samouczek. Czy mógłbyś mi powiedzieć, gdzie mam ten setIntegerproperty.
Ashoka Mondal
40
-1 „problem jest prawdopodobnie spowodowany szybkością emulatora, więc sieć jest zbyt wolna” - nieprawdopodobne, ponieważ żadna sieć nie jest zaangażowana! Ten adres URL prowadzi do lokalnego zasobu Androida.
Chris Stratton,
Dodałem to w moim pliku konfiguracyjnym, ale nie działa na Nexusie 5x -
Sa E Chowdary
183

W swoim pliku config.xml dodaj tę linię:

<preference name="loadUrlTimeoutValue" value="700000" />
Soufiene
źródło
6
Powinieneś to również opisać
Rohit Gupta
13
Dla każdego, kto się zastanawia: to czas w milisekundach, jaki upłynął podczas ładowania strony, zanim pojawił się błąd: cordova.apache.org/docs/en/latest/config_ref/index.html
Cedric Reichenbach
13
<preference name="loadUrlTimeoutValue" value="120000" />jest lepszy w porównaniu z 700000, to znaczy, jeśli twoja aplikacja nie pojawia się w ciągu dwóch minut, to coś jest nie tak (i ​​powinieneś to naprawić za pomocą innego rozwiązania). Zaskocznie nie chcesz czekać około 11 minut, aby zobaczyć, czy aplikacja się zbliża, czy nie! (Dlatego przede wszystkim mamy pojęcie limitu czasu, prawda? :-)) Zgodnie z dokumentem domyślna wartość to 20000 (20 sekund)
SidMorad,
Dodałem to w moim pliku konfiguracyjnym, ale nie działa na Nexusie 5x
Sa E Chowdary
To takie dziwne. Mój był ustawiony na 70000, a aplikacje umierały po około 30 sekundach próby załadowania. Zmieniłem to na 120000 i teraz ładują się pomyślnie w 3-4 sekundy. To wszystko, co zmieniłem. Argh.
Brian Knoblauch,
24

Oto działające rozwiązanie

utwórz nową stronę main.html

przykład:

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

zmień następujące w mainactivity.java

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

do

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

Teraz stwórz swoją aplikację i będzie działać na każdym wolnym połączeniu

odniesienie .

UWAGA: jest to obejście, które znalazłem w 2013 roku.

Robin C. Samuel
źródło
3
Właściwie wystarczy zmienić nazwę pliku index.html i utworzyć plik main.html z window.location = './index.html'. Nie trzeba zmieniać super.loadUrl z MainActivity.java
M.Salomaa
4
Ten sam efekt! Ale rzeczywista strona zostanie zmieniona na main.html. Ale chcę, aby moja strona była index.html.BTW, myślę, że twój komentarz jest błędny. Trzeba zmienić nazwę index.html, aby main.htmli utworzyć index.htmlstronę, a następnie dodać window.location = './main.html'. na index.htmlstronie. To powinno działać.
Robin C Samuel
Tak masz rację! Tęskniłem za wpisaniem tego: DI oznaczało utworzenie index.html z window.location = './main.html'. :)
M.Salomaa
Dlaczego potrzebujesz, aby Twoja rzeczywista strona miała nazwę index.html?
M. Salomaa
1
@madebydavid Odpowiedziałem na to 4 lata temu. W tamtym momencie nie było niezawodnych rozwiązań, które poradziłyby sobie z opóźnieniami spowodowanymi załadowaniem wielu skryptów. Więc aplikacja ulegała awarii, ponieważ skrypty opóźniały ładowanie strony. Działa to, ponieważ main.htmljest lekki i nie ma skryptów do załadowania, dzięki czemu szybciej inicjalizuje aplikację, a następnie ładuje skrypty index.html. Zamknięcie </head>było literówką, dodaną teraz.
Robin C Samuel
10

Usuń zdalnie połączone pliki jQuery, takie jak: https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

Zamiast tego pobierz ten plik i załaduj go z lokalnego folderu js, tworząc identyfikator URI:

js/jquery.min.js

sharma_kunal
źródło
6

Usuń zewnętrzne skrypty z pliku index.html

Zmień to:

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

do

<script src="project_folder/highcharts-more.js"></script>
Raugaral
źródło
5

Miałem podobny problem i na podstawie powyższych sugestii najpierw dodałem "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);" ale to nie pomogło. Wypróbowałem więc Project -> Clean, zadziałało i mogę teraz uruchomić aplikację!

Avinash ...

Avinash
źródło
5

Spróbuj tego,

1. Zmień nazwę pliku index.html na „main.html”

2. Utwórz nowy „index.html” i umieść w nim następującą treść:

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

3. Odbuduj swoją aplikację! Nigdy więcej błędów!

Nithin Krishnan P
źródło
i co powinienem zrobić, jeśli muszę dodać argumenty, takie jak main.html? USER = xxx & SESSION = xxx?
Nourdine Alouane
3
window.location.href = "./ main.html? USER = xxx & SESSION = xxx"
Nithin Krishnan P
Żadne cordova i wtyczki nie są wstrzykiwane do main.html
viskin
Dodałem ten kod, ale przez około 1 minutę po powitaniu pojawia się biały ekran. Co powinienem zrobić?
Anjana
4

To samo miałem w swoim projekcie.

Próbowałem "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);", ale bezskutecznie.

Upewniłem się, że wszystkie pliki zostały poprawnie połączone [pliki CSS, JS itp.], Zweryfikowałem kod HTML za pomocą walidatora w3c [ http://validator.w3.org/#validate_by_upload ] i wyczyściłem projekt [Projekt -> Wyczyść]

Teraz ładuje się i wykonuje bez tego samego błędu.

Mam nadzieję że to pomoże

Deano
źródło
4

Wydłużenie limitu czasu ładowania nie rozwiąże problemu, który spowodował błąd, po prostu zapobiegnie wyświetleniu komunikatu przez system, ale w jakikolwiek sposób wpłynie to na wydajność.

Rzeczywisty powód: być może łączysz pliki lub obrazy ze zdalnymi lokalizacjami, a ładowanie tych zasobów trwa zbyt długo. (jest to prawdopodobnie najczęstszy błąd)

Ostateczne rozwiązanie: przenieś wszystkie potrzebne skrypty, obrazy i css do niektórych folderów lokalnych i załaduj je lokalnie ...

Wydajność zostanie zwiększona, a błędy zostaną skutecznie rozwiązane.

jjyepez
źródło
4

naprawiając to w aplikacji jonowej, po prostu dodaj

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

do pliku config.xml bezpośrednio po tym wierszu

<platform name="android">
Adeojo Emmanuel IMM
źródło
3

Sprawdź index.html plik. Jeśli korzystasz z zasobów zewnętrznych, które nie są dostępne podczas uruchamiania aplikacji, możesz otrzymać ten błąd.

W moim przypadku zapomniałem usunąć link w skrypcie debuggera (weinre).

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

Więc aplikacja działała na emulatorze, ponieważ http://192.168.0.102:8080/znajdowała się na moim hoście lokalnym i była dostępna dla emulatora.

Ale kiedy konfigurowałem aplikację na telefonie komórkowym, miałem ten sam błąd, ponieważ 192.168.0.102 nie był dostępny z sieci komórkowej.

Alexey Muravyov
źródło
1

W moim przypadku używam ionic i po prostu zamknąłem okno dialogowe, które przeszło do aplikacji w emulatorze i zamiast tego uruchomiłem moją aplikację. To zadziałało. Wpadłem na to stąd, ponieważ był to tylko czas oczekiwania.

FernandoZ
źródło
1

Jeśli korzystasz z programu Visual Studio. Po zmianie config.xml czasami tego potrzebujesz

rozwiązanie do czystej kompilacji odbuduj aplikację

To działa dla mnie.

caglabaran
źródło
1

W moim przypadku problem wynikał z utraty połączenia internetowego w moim WiFi.

Chong Lip Phang
źródło
1

Miałem ten sam problem. Zauważyłem, że w swoim indeksie mam zarówno funkcję „on device ready”, jak i „document.ready”, więc usunięcie jednego z nich rozwiązało problem :)

Ptak
źródło
-8

Innym powodem może wystąpić ten błąd jest: nie ma index.htmlw .../YourApp/www/!

Właśnie skorzystałem z przewodnika jonowego , a jednym z kroków jest:

$ rm www/index.html

W systemie iOS nie stanowi to problemu, ponieważ podczas kompilacji kompilator zamiast tego pobiera domyślny kod HTML. Jednak budując dla Androida, NIE MA przykładuindex.html jest używany. Zajęło mi to trochę czasu, zanim się dowiedziałem („DLACZEGO to działa na iOS, ale nie na Androidzie…?)

Proste rozwiązanie: utwórz plik index.html, zapisz go pod .../YourApp/www, przebuduj ... i voila!

Sztylet
źródło