Application Error - การเชื่อมต่อกับเซิร์ฟเวอร์ไม่สำเร็จ (ไฟล์: ///android_asset/www/index.html)


157

แอป Dies On Startup (การเชื่อมต่อกับเซิร์ฟเวอร์ไม่สำเร็จ)

ฉันมีแอพพลิเคชั่น Android ที่ฉันเขียนโดยใช้ PhoneGap BUILD แอปทำงานได้ดีก่อนหน้านี้ แต่ตอนนี้ดูเหมือนว่าฉันได้รับข้อผิดพลาดนี้หลังจากปรับแต่งแอปของฉัน (การเปลี่ยนแปลง UI บางอย่างเท่านั้น)

1) เมื่อฉันเริ่มแอพที่ฉัน (ปกติ) จะได้รับ:

Application Error - การเชื่อมต่อกับเซิร์ฟเวอร์ไม่สำเร็จ (ไฟล์: ///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. รหัส / ข้อมูล / ภาพของคุณมีขนาดใหญ่เกินไป (ฉันเดาว่าในกรณีของคุณคุณกำลังใช้บางภาพดังที่คุณบอกว่าคุณได้ทำการดัดแปลง UI บางอย่างอาจมีขนาดภาพสูง)
  2. สคริปต์ของคุณอาจมีการวนซ้ำไม่ จำกัด หรือยาวดังนั้นจึงใช้เวลาในการโหลดนานเกินไป
  3. คุณจะใช้สคริปต์มากเกินไป (jQuery, iscroll ฯลฯ ฯลฯ จำนวนปลั๊กอินหรือสคริปต์มากขึ้น)

7
สิ่งที่เกิดขึ้นในกรณีของฉันคือฉันยังมีแท็กสคริปต์ที่ชี้ไปยังอินสแตนซ์ในท้องถิ่นของ Weinre Weinre ไม่ทำงาน ดังนั้น - หมดเวลา
demaniak

ฉันกำลังสร้างแอพโดยใช้ phonegap ผ่านdevgirl.org/2013/07/17/…บทแนะนำนี้ คุณช่วยบอกฉันทีฉันมีให้ที่ setIntegerproperty นี้ได้ไหม
Ashoka Mondal

40
-1 "ปัญหาน่าจะเกิดขึ้นเนื่องจากความเร็วของตัวจำลองดังนั้นเครือข่ายช้าเกินไป" - ไม่น่าเชื่อเนื่องจากไม่มีเครือข่ายที่เกี่ยวข้อง! URL นั้นคือเนื้อหาแอนดรอยด์ในท้องถิ่น
Chris Stratton

ฉันเพิ่มสิ่งนี้ลงในไฟล์ปรับแต่งของฉัน แต่มันไม่ทำงานบน Nexus 5 -
Sa E Chowdary

183

ในไฟล์ config.xml ของคุณเพิ่มบรรทัดนี้:

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

6
คุณควรอธิบายสิ่งนี้ด้วย
Rohit Gupta

13
สำหรับทุกคนที่สงสัยว่า: มันเป็นระยะเวลาเป็นมิลลิวินาทีที่รอในขณะที่โหลดหน้าเว็บก่อนที่จะเกิดข้อผิดพลาด: cordova.apache.org/docs/en/latest/config_ref/index.html
Cedric Reichenbach

13
<preference name="loadUrlTimeoutValue" value="120000" />เปรียบเทียบได้ดีกว่ากับ 700,000 ฉันหมายความว่าถ้าแอปของคุณไม่มาในอีกสองนาทีก็มีบางอย่างผิดปกติ (และคุณควรแก้ไขโดยใช้วิธีแก้ไขปัญหาอื่น) แน่นอนว่าคุณไม่ต้องการรอประมาณ 11 นาทีเพื่อดูว่าแอพกำลังจะมาหรือไม่! (นั่นเป็นสาเหตุที่เรามีแนวคิดการหมดเวลาในตอนแรกใช่ไหม? :-)) ตามค่าเริ่มต้นคือ 20,000 (20 วินาที)
SidMorad

ฉันเพิ่มสิ่งนี้ลงในไฟล์ปรับแต่งของฉัน แต่มันไม่ทำงานบน Nexus 5x
Sa E Chowdary

นี่มันแปลกมาก ฉันมีการตั้งค่าของฉันเป็น 70000 และแอพกำลังจะตายหลังจากนั้นประมาณ 30 วินาทีหลังจากพยายามโหลด ฉันเปลี่ยนเป็น 120000 และตอนนี้โหลดสำเร็จใน 3-4 วินาที นั่นคือทั้งหมดที่ฉันเปลี่ยน โอ๊ะ
Brian Knoblauch

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");

ตอนนี้สร้างแอปพลิเคชันของคุณและใช้งานได้กับการเชื่อมต่อที่ช้า

การอ้างอิง

หมายเหตุ: นี่เป็นวิธีแก้ปัญหาที่ฉันพบในปี 2556


3
ที่จริงคุณเพียงแค่เปลี่ยนชื่อ index.html ของคุณและสร้าง main.html ด้วย window.location = './index.html' ไม่จำเป็นต้องเปลี่ยน super.loadUrl จาก MainActivity.java
M.Salomaa

4
ผลเหมือนกัน! แต่หน้าจริงของคุณจะเปลี่ยนเป็น main.html แต่ฉันต้องการให้หน้าจริงๆเป็น index.html.BTW ฉันคิดว่าความคิดเห็นของคุณผิด คุณจำเป็นต้องเปลี่ยนชื่อindex.htmlไปmain.htmlและสร้างหน้าแล้วเพิ่มindex.html window.location = './main.html'ในindex.htmlหน้า สิ่งนี้น่าจะใช้ได้
Robin C Samuel

ใช่คุณพูดถูก! ฉันพลาดพิมพ์: DI หมายความว่าสร้าง index.html พร้อม window.location = './main.html' :)
M.Salomaa

ทำไมคุณต้องการหน้าจริงของคุณเป็น index.html
M.Salomaa

1
@madebydavid ฉันตอบกลับ 4 ปีนี้ ณ จุดนี้ไม่มีวิธีแก้ปัญหาที่เชื่อถือได้ในการจัดการกับความล่าช้าที่เกิดขึ้นเมื่อมีสคริปต์จำนวนมากที่ต้องโหลด ดังนั้นแอพจึงทำงานล้มเหลวเนื่องจากสคริปต์เลื่อนการโหลดหน้าเว็บ นี้ทำงานได้เพราะมีน้ำหนักเบาและมีสคริปต์เพื่อโหลดไม่มีจึงเริ่มต้นแอปได้เร็วขึ้นและแล้วโหลดสคริปต์บนmain.html index.htmlการปิด</head>เป็นคำที่พิมพ์ผิดเพิ่มตอนนี้
Robin C Samuel

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, ใช้งานได้และฉันสามารถเปิดแอพได้ทันที!

Avinash ...


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"
Nithin Krishnan P

ไม่มีการวาง Cordova และปลั๊กอินใน main.html
viskin

ฉันได้เพิ่มรหัสนี้ แต่ประมาณ 1 นาทีหน้าจอสีขาวกำลังมาหลังจากสาด ฉันควรทำอย่างไรดี?
Anjana

4

ฉันมีเหมือนกันในโครงการของฉัน

ฉันลอง "super.setIntegerProperty (" loadUrlTimeoutValue ", 70000);" แต่ไม่มีประโยชน์

ฉันมั่นใจว่าไฟล์ทั้งหมดมีการเชื่อมโยงอย่างถูกต้อง [CSS, ไฟล์ JS ฯลฯ ] ตรวจสอบ HTML โดยใช้ตัวตรวจสอบความถูกต้อง w3c [ http://validator.w3.org/#validate_by_upload ] และทำความสะอาดโครงการ [โครงการ -> สะอาด]

ขณะนี้โหลดและดำเนินการโดยไม่มีข้อผิดพลาดเดียวกัน

หวังว่านี่จะช่วยได้


4

การขยายการโหลด Timeout Limit จะไม่แก้ปัญหาที่ทำให้เกิดข้อผิดพลาดมันจะหลีกเลี่ยงระบบที่จะแสดงข้อความ แต่ประสิทธิภาพจะได้รับผลกระทบใด ๆ

เหตุผลที่แท้จริง: คุณอาจเชื่อมโยงไฟล์หรือรูปภาพไปยังสถานที่ห่างไกลและทรัพยากรเหล่านั้นใช้เวลาโหลดนานเกินไป (น่าจะเป็นข้อผิดพลาดที่พบบ่อยที่สุด)

วิธีการแก้ปัญหาที่ชัดเจน: ย้ายสคริปต์รูปภาพและ 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

ในกรณีของฉันฉันใช้ไอออนิกและปิดกล่องโต้ตอบไปที่แอพในตัวจำลองและเรียกใช้แอพของฉันจากที่นั่นแทน สิ่งนี้ใช้ได้ผล ฉันได้รับความคิดจากที่นี่เพราะมันเป็นเพียงปัญหาหมดเวลา


1

หากคุณใช้สตูดิโอภาพ หลังจากเปลี่ยน config.xml บางครั้งคุณต้องการสิ่งนี้

clean build solution สร้างแอปของคุณใหม่

มันใช้งานได้สำหรับฉัน



1

ฉันกำลังเผชิญกับปัญหาเดียวกัน ฉันสังเกตเห็นว่าในดัชนีของฉันฉันมีทั้งฟังก์ชั่น "บนอุปกรณ์" และ "document.ready" ดังนั้นการลบหนึ่งในนั้นช่วยแก้ไขปัญหาของฉัน :)


-8

อีกสาเหตุหนึ่งที่ทำให้เกิดข้อผิดพลาดนี้คือไม่มีindex.htmlใน.../YourApp/www/!

ฉันเพิ่งทำตามคู่มืออิออนและหนึ่งในขั้นตอนคือ:

$ rm www/index.html

บน iOS ไม่มีปัญหาเช่นเดียวกับในระหว่างการสร้างคอมไพเลอร์ใช้ HTML เริ่มต้นแทน อย่างไรก็ตามเมื่อมีการสร้างสำหรับหุ่นยนต์, ตัวอย่างไม่index.htmlถูกนำมาใช้ เอาฉันไปหาบางครั้ง ("ทำไมมันทำงานบน iOS แต่ไม่ใช่บน Android ... ?)

วิธีแก้ปัญหาอย่างง่าย: สร้าง index.html บันทึกไว้ใต้.../YourApp/wwwสร้างใหม่ ... และ voila!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.