Erreur d'application - La connexion au serveur a échoué. (fichier: ///android_asset/www/index.html)

157

L'application meurt au démarrage (la connexion au serveur a échoué)

J'ai une application Android que j'écris avec PhoneGap BUILD. L'application fonctionnait bien auparavant, mais il semble maintenant que j'obtienne cette erreur après avoir affiné mon application (certaines modifications de l'interface utilisateur uniquement)

1) Lorsque je lance l'application, j'obtiens (généralement):

Erreur d'application - La connexion au serveur a échoué. (fichier: ///android_asset/www/index.html)

Désolé s'il s'agit d'une duplication d'une question. J'ai vu des questions similaires ici, mais je n'ai pas trouvé de réponse ou de solution parfaite. Comme dans mon cas, cela fonctionnait bien jusqu'à mes derniers changements.

gitsitgo
la source

Réponses:

73

Comme vous l'avez dit, il y a de nombreuses questions en double sur le même sujet. Comment expliquer votre situation.

Le problème peut être résolu en ajoutant un délai pour appeler votre index.html

c'est-à-dire que vous devez ajouter super.setIntegerProperty("loadUrlTimeoutValue", 70000);votre fichier activity.java (dans src / com / yourProj / - / youractivity.java) au-dessus de cette ligne: super.loadUrl("file:///android_asset/www/index.html");

Explication:

Cela peut être dû aux raisons suivantes

La raison principale: le problème est probablement dû à la vitesse de l'émulateur, le réseau est donc trop lent pour terminer la communication en temps opportun.

Cela peut être dû à:

  1. Votre code / données / image est de trop grande taille (je suppose que dans votre cas, vous utilisez des images, comme vous l'avez dit, vous avez apporté des modifications à l'interface utilisateur, la taille des images peut être élevée)
  2. Votre script peut avoir une boucle infinie ou longue, de sorte que le chargement prend trop de temps.
  3. Vous utiliserez trop de scripts (jQuery, iscroll, etc. plus grand nombre de plugins ou de scripts)
AnhSirk Dasarp
la source
7
Ce qui s'est passé dans mon cas, c'est que j'avais toujours une balise de script pointant vers une instance locale de Weinre. Weinre ne courait pas. Par conséquent - les délais d'attente.
demaniak
Je crée une application en utilisant phonegap via devgirl.org/2013/07/17/… ce tutoriel. Pourriez-vous s'il vous plaît me dire où je dois à cette propriété setInteger.
Ashoka Mondal
40
-1 "le problème est probablement dû à la vitesse de l'émulateur donc le réseau est trop lent" - invraisemblable, car aucun réseau n'est impliqué! Cette URL est vers un élément Android local.
Chris Stratton
J'ai ajouté ceci dans mon fichier de configuration, mais cela ne fonctionne pas sur le nexus 5x -
Sa E Chowdary
183

Dans votre fichier config.xml, ajoutez cette ligne:

<preference name="loadUrlTimeoutValue" value="700000" />
Soufiene
la source
6
Vous devriez également le décrire
Rohit Gupta
13
Pour ceux qui se demandent: c'est le temps en millisecondes attendu pendant le chargement de la page avant de lancer une erreur: cordova.apache.org/docs/en/latest/config_ref/index.html
Cedric Reichenbach
13
<preference name="loadUrlTimeoutValue" value="120000" />est mieux par rapport à 700000, je veux dire si votre application ne sort pas dans deux minutes, alors il y a quelque chose qui ne va pas (et vous devriez le réparer en utilisant une autre solution). Vous ne voulez sûrement pas attendre environ 11 minutes pour voir si une application arrive ou non! (C'est pourquoi nous avons un concept de délai d'expiration en premier lieu, non? :-)) Selon le document, la valeur par défaut est 20000 (20 secondes)
SidMorad
J'ai ajouté ceci dans mon fichier de configuration, mais cela ne fonctionne pas sur le nexus 5x
Sa E Chowdary
Cela est tellement bizarre. J'avais le mien réglé à 70000, et les applications mouraient après environ 30 secondes d'essais de chargement. Je l'ai changé en 120000 et maintenant ils se chargent avec succès en 3-4 secondes. C'est tout ce que j'ai changé. Argh.
Brian Knoblauch
24

Voici la solution de travail

créer une nouvelle page main.html

exemple:

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

modifiez ce qui suit dans mainactivity.java

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

à

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

Maintenant, créez votre application et cela fonctionne sur n'importe quelle connexion lente

référence .

REMARQUE: il s'agit d'une solution de contournement que j'ai trouvée en 2013.

Robin C Samuel
la source
3
En fait, il vous suffit de renommer votre index.html et de créer main.html avec window.location = './index.html'. Pas besoin de changer super.loadUrl de MainActivity.java
M.Salomaa
4
Même effet! Mais votre page actuelle sera remplacée par main.html. Mais je veux que ma page soit index.html.BTW, je pense que votre commentaire est faux. Vous devez renommer index.htmlpour main.htmlcréer une index.htmlpage, puis ajouter window.location = './main.html'. dans la index.htmlpage. Cela devrait fonctionner.
Robin C Samuel
Oui tu as raison! J'ai tapé celui-là: DI signifiait que créer index.html avec window.location = './main.html'. :)
M.Salomaa
Pourquoi avez-vous besoin que votre page réelle soit index.html?
M.Salomaa
1
@madebydavid J'ai répondu à cela il y a 4 ans. À ce stade, il n'existait aucune solution fiable pour gérer le retard causé par le chargement de nombreux scripts. L'application plantait donc depuis que les scripts ont retardé le chargement de la page. Cela fonctionne parce que le main.htmlest léger et n'a pas de scripts à charger, initialisant ainsi l'application plus rapidement, puis chargeant les scripts index.html. La fermeture </head>était une faute de frappe, ajoutée maintenant.
Robin C Samuel
10

Veuillez supprimer les fichiers jQuery liés à distance tels que: https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

Au lieu de cela, téléchargez ce fichier et chargez-le à partir de votre dossier js local, en faisant l'URI:

js/jquery.min.js

sharma_kunal
la source
6

Supprimez les scripts externes dans votre index.html

Change ça:

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

à

<script src="project_folder/highcharts-more.js"></script>
Raugaral
la source
5

J'ai eu un problème similaire et sur la base des suggestions ci-dessus, j'ai d'abord ajouté "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);" mais cela n'a pas aidé. J'ai donc essayé Project -> Clean, cela a fonctionné et je peux lancer l'application maintenant!

Avinash ...

Avinash
la source
5

Essaye ça,

1. Renommez votre index.html en "main.html"

2.Créez un nouveau «index.html» et mettez-y le contenu suivant:

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

3.Reconstruisez votre application! Plus d'erreurs!

Nithin Krishnan P
la source
et que dois-je faire si je dois ajouter des arguments comme main.html? USER = xxx & SESSION = xxx?
Nourdine Alouane
3
window.location.href = "./ main.html? USER = xxx & SESSION = xxx"
Nithin Krishnan P
Pas de cordova et de plugins injectés dans main.html
viskin
J'ai ajouté ce code mais pendant environ 1 minute, un écran blanc arrive après l'éclaboussure. Que devrais-je faire?
Anjana
4

J'avais la même chose sur mon projet.

J'ai essayé "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);" mais en vain.

Je me suis assuré que tous les fichiers étaient correctement liés [CSS, fichiers JS, etc.], j'ai validé le HTML à l'aide du validateur w3c [ http://validator.w3.org/#validate_by_upload ] et j'ai nettoyé le projet [Projet -> Nettoyer]

Il se charge et s'exécute maintenant sans la même erreur.

J'espère que cela t'aides

Deano
la source
4

L'extension de la limite de délai de chargement ne résoudra pas le problème qui a causé l'erreur, cela évitera simplement au système d'afficher le message, mais les performances seront affectées de quelque manière que ce soit.

Raison réelle: il se peut que vous liez des fichiers ou des images à des emplacements distants et que ces ressources prennent trop de temps à charger. (c'est probablement l'erreur la plus courante)

Solution définitive: déplacez tous les scripts, images et css nécessaires dans certains dossiers locaux et chargez-les localement ...

Les performances seront augmentées et l'erreur sera efficacement résolue.

jjyepez
la source
4

résoudre ce problème sur une application ionique, ajoutez simplement

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

dans votre fichier config.xml immédiatement après cette ligne

<platform name="android">
Adeojo Emmanuel IMM
la source
3

Vérifiez votre index.htmlfichier. Si vous utilisez des ressources externes, qui ne sont pas disponibles lorsque vous exécutez l'application, vous pouvez obtenir cette erreur.

Dans mon cas, j'ai oublié de supprimer le lien sur le script du débogueur (weinre).

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

Donc, l'application a fonctionné sur l'émulateur car elle http://192.168.0.102:8080/était sur mon hôte local et disponible pour l'émulateur.

Mais lorsque j'ai configuré l'application sur un téléphone mobile, j'ai eu la même erreur, car 192.168.0.102 n'était pas disponible sur le réseau mobile.

Alexey Muravyov
la source
1

Dans mon cas, j'utilise ionic et j'ai simplement fermé la boîte de dialogue pour accéder aux applications de l'émulateur et exécuter mon application à partir de là. Cela a fonctionné. J'ai eu l'idée de ça d'ici car c'était juste un problème de temps mort.

FernandoZ
la source
1

Si vous utilisez Visual Studio. Après avoir changé config.xml, vous en avez parfois besoin

solution de build propre reconstruisez votre application

Ça marche pour moi.

caglabaran
la source
1

Pour mon cas, le problème était dû à la perte de la connexion Internet dans mon WiFi.

Chong Lip Phang
la source
1

J'étais confronté au même problème. J'ai remarqué que dans mon index j'avais à la fois la fonction "sur l'appareil prêt" et la fonction "document.ready", donc la suppression de l'une d'entre elles a résolu mon problème :)

Un oiseau
la source
-8

Une autre raison pour laquelle cette erreur peut se produire est: il n'y a pas index.htmlde .../YourApp/www/!

Je viens de suivre le guide ionique , et l'une des étapes est:

$ rm www/index.html

Sur iOS, ce n'est pas un problème car lors de la construction, le compilateur utilise du HTML par défaut à la place. Cependant, lors de la construction pour Android, AUCUN exempleindex.html n'est utilisé. Il m'a fallu un certain temps pour le savoir ("POURQUOI ça marche sur iOS, mais pas sur Android ...?)

Solution simple: créez un index.html, enregistrez-le sous .../YourApp/www, reconstruisez ... et voilà!

Poignard
la source