Erro de aplicativo - A conexão com o servidor não teve êxito. (arquivo: ///android_asset/www/index.html)

157

O aplicativo morre na inicialização (a conexão com o servidor não teve êxito)

Eu tenho um aplicativo Android que estou escrevendo usando o PhoneGap BUILD. O aplicativo estava funcionando bem antes, mas agora parece que estou recebendo esse erro após refinar meu aplicativo (apenas algumas alterações na interface do usuário)

1) Quando inicio o aplicativo, eu geralmente recebo:

Erro no aplicativo - A conexão com o servidor não teve êxito. (arquivo: ///android_asset/www/index.html)

Desculpe se isso é duplicação de qualquer pergunta. Vi algumas perguntas semelhantes aqui, mas não consegui encontrar uma resposta ou solução perfeita. Como no meu caso, estava funcionando bem até minhas últimas alterações.

gitsitgo
fonte

Respostas:

73

Como você disse, existem muitas perguntas duplicadas sobre o mesmo tópico. Qualquer como explicar sua situação.

O problema pode ser resolvido adicionando um tempo limite para chamar seu index.html

ou seja, você precisa adicionar super.setIntegerProperty("loadUrlTimeoutValue", 70000);seu arquivo activity.java (dentro de src / com / yourProj / - / youractivity.java) acima desta linha: super.loadUrl("file:///android_asset/www/index.html");

Explicação:

Isso pode acontecer devido aos seguintes motivos

O principal motivo: o problema provavelmente se deve à velocidade do emulador, portanto a rede é muito lenta e conclui a comunicação em tempo hábil.

Isso pode ser devido a:

  1. Seu código / dados / imagem é muito grande (acho que, no seu caso, você está usando algumas imagens, como disse que fez algumas modificações na interface do usuário, o tamanho das imagens é alto)
  2. Seu script pode ter um loop infinito ou longo, de modo que leva muito tempo para carregar.
  3. Você estará usando muitos scripts (jQuery, iscroll, etc. etc. mais número de plugins ou scripts)
AnhSirk Dasarp
fonte
7
O que aconteceu no meu caso é que eu ainda tinha uma tag de script apontando para uma instância local do Weinre. Weinre não estava correndo. Portanto - tempos limite.
demaniak
Estou criando um aplicativo usando phonegap através do devgirl.org/2013/07/07/17/… neste tutorial. Você poderia me dizer onde eu tenho essa propriedade setInteger.
Ashoka Mondal
40
-1 "o problema provavelmente é devido à velocidade do emulador, portanto a rede está muito lenta" - implausível, pois nenhuma rede está envolvida! Esse URL é para um ativo Android local.
Chris Stratton
i adicionado este no meu arquivo de configuração, mas não o seu trabalho em 5x nexo -
Sa E Chowdary
183

No seu arquivo config.xml, adicione esta linha:

<preference name="loadUrlTimeoutValue" value="700000" />
Soufiene
fonte
6
Você também deve descrever isso #
Rohit Gupta
13
Para quem se pergunta: é a quantidade de tempo em milissegundos esperada ao carregar a página antes de gerar um erro: cordova.apache.org/docs/en/latest/config_ref/index.html
Cedric Reichenbach
13
<preference name="loadUrlTimeoutValue" value="120000" />é melhor em comparação com o 700000, quero dizer, se o aplicativo não for lançado em dois minutos, haverá algo errado (e você deve corrigi-lo usando outra solução). Certamente você não deseja esperar cerca de 11 minutos para ver se um aplicativo está sendo lançado ou não! (É por isso que temos o conceito de tempo limite, certo? :-)) De acordo com o documento, o valor padrão é 20000 (20 segundos)
SidMorad 27/02
i adicionado este no meu arquivo de configuração, mas não o seu trabalho em 5x nexo
Sa E Chowdary
Isto é tão estranho. Eu tinha o meu definido para 70000, e os aplicativos estavam morrendo após cerca de 30 segundos de tentativa de carregamento. Eu mudei para 120000 e agora eles carregam com sucesso em 3-4 segundos. Foi tudo o que mudei. Argh.
precisa
24

Aqui está a solução de trabalho

crie uma nova página main.html

exemplo:

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

altere o seguinte em mainactivity.java

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

para

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

Agora construa seu aplicativo e ele funcione em qualquer conexão lenta

referência .

NOTA: Esta é uma solução alternativa encontrada em 2013.

Robin C Samuel
fonte
3
Na verdade, você acabou de renomear seu index.html e criar main.html com window.location = './index.html'. Não há necessidade de alterar o super.loadUrl de MainActivity.java
M.Salomaa
4
O mesmo efeito! Mas sua página atual será alterada para main.html. Mas quero que minha página seja index.html.BTW, acho que seu comentário está errado. Você precisa mudar o nome index.htmlpara main.htmle criar uma index.htmlpágina, em seguida, adicionar window.location = './main.html'. na index.htmlpágina. Isso deve funcionar.
Robin C Samuel
Sim, você está certo! Eu senti falta de digitar aquele: DI significava que criar index.html com window.location = './main.html'. :)
M.Salomaa
Por que você precisa que sua página real seja index.html?
M.Salomaa
1
@madebydavid Eu respondi isso há 4 anos. Nesse ponto, não havia soluções confiáveis ​​para lidar com o atraso causado quando há muitos scripts a serem carregados. Portanto, o aplicativo estava travando desde que os scripts atrasaram o carregamento da página. Isso funciona porque main.htmlé leve e não possui scripts para carregar, inicializando o aplicativo mais rapidamente e, em seguida, carregando os scripts index.html. O fechamento </head>foi um erro de digitação, adicionado agora.
Robin C Samuel
10

Remova os arquivos jQuery vinculados remotamente, como: https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

Em vez disso, faça o download deste arquivo e carregue-o na pasta js local, criando o URI:

js/jquery.min.js

sharma_kunal
fonte
6

Remova os scripts externos em seu index.html

Mude isso:

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

para

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

Eu tive um problema semelhante e, com base nas sugestões acima, adicionei primeiro "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);" mas isso não ajudou. Então, eu tentei Projeto -> Limpo, que funcionou e posso iniciar o aplicativo agora!

Avinash ...

Avinash
fonte
5

Tente isso,

1. Renomeie seu index.html para "main.html"

2.Crie um novo "index.html" e coloque o seguinte conteúdo:

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

3. reconstrua seu aplicativo! Sem mais erros!

Nithin Krishnan P
fonte
e o que devo fazer se precisar adicionar alguns argumentos como main.html? USER = xxx & SESSION = xxx?
Nourdine Alouane
3
window.location.href = "./ main.html? USER = xxx & SESSION = xxx"
Nithin Krishnan P
Nenhuma Cordova e encaixes serem injectadas main.html
Viskin
Eu adicionei esse código, mas por aproximadamente 1 minuto, uma tela branca aparece após o splash. O que devo fazer?
Anjana
4

Eu tive o mesmo no meu projeto.

Tentei "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);" mas sem sucesso.

Assegurei que todos os arquivos fossem vinculados corretamente [CSS, arquivos JS etc.], validei o HTML usando o validador w3c [ http://validator.w3.org/#validate_by_upload ] e limpei o projeto [Project -> Clean]

Agora ele é carregado e executado sem o mesmo erro.

Espero que isto ajude

Deano
fonte
4

Estender o limite de tempo limite de carregamento não resolverá o problema que causou o erro, apenas evitará que o sistema mostre a mensagem, mas o desempenho será afetado.

Motivo real: você pode vincular arquivos ou imagens a locais remotos e esses recursos estão demorando muito para serem carregados. (este é provavelmente o erro mais comum)

Solução definitiva: mova todos os scripts, imagens e css necessários para algumas pastas locais e carregue-os localmente ...

O desempenho será aumentado e o erro será efetivamente resolvido.

jjyepez
fonte
4

corrigindo isso em um aplicativo iônico, basta adicionar

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

para o seu arquivo config.xml imediatamente após esta linha

<platform name="android">
Adeojo Emmanuel IMM
fonte
3

Verifique seu index.htmlarquivo. Se você usar recursos externos, que não estão disponíveis quando você executa o aplicativo, poderá obter esse erro.

No meu caso, esqueci de excluir o link no script do depurador (weinre).

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

Então o aplicativo funcionou no emulador porque http://192.168.0.102:8080/estava no meu host local e disponível para o emulador.

Porém, quando configurei o aplicativo no celular, tive o mesmo erro, porque 192.168.0.102 não estava disponível na rede móvel.

Alexey Muravyov
fonte
1

No meu caso, estou usando o ionic e simplesmente fechei a caixa de diálogo, fui para aplicativos no emulador e executei meu aplicativo a partir daí. Isso funcionou. Eu tive a ideia disso daqui, já que era apenas uma questão de tempo limite.

FernandoZ
fonte
1

Se você estiver usando o visual studio. Depois de alterar o config.xml, às vezes você precisa disso

solução de compilação limpa reconstrua seu aplicativo

Está funcionando para mim.

caglabaran
fonte
1

Para o meu caso, o problema foi devido à perda da conexão com a internet no meu WiFi.

Chong Lip Phang
fonte
1

Eu estava enfrentando o mesmo problema. Percebi que, no meu índice, eu tinha a função "on device ready" e "document.ready", então remover um deles corrigia o meu problema :)

Um pássaro
fonte
-8

Outra razão este erro pode ocorrer é: não existe index.htmlno .../YourApp/www/!

Eu apenas segui o guia iônico e uma das etapas é:

$ rm www/index.html

No iOS, isso não é problema, pois durante a compilação, o compilador usa um HTML padrão. No entanto, ao criar para o Android, nenhum exemplo index.htmlé usado. Levou algum tempo para descobrir ("POR QUE funciona no iOS, mas não no Android ...?)

Solução fácil: crie um index.html, salve-o .../YourApp/www, reconstrua-o ... e pronto!

Dirk
fonte