2010-10-26 34 views
68

Tôi đã thử mẫu, bản trình diễn từ mã Google và các tài nguyên khác với WebView, nhưng khi tôi cố gắng làm điều đó trong mã của riêng mình, nó không hoạt động đối với tôi.Tải tệp .html hiện có bằng Android WebView

Tôi muốn tải myfile.html mà tôi đặt trong thư mục tài sản và sử dụng:

private WebView myWebView; 

myWebView.loadUrl("file:///android_assets/myfile.html"); 

Mở giả lập cho thấy lỗi

Trang web tại file:///android_assets/myfile.html không thể nạp như: Các yêu cầu không tìm thấy tệp. /android_assets/myfile.html

Khi tôi đặt tập tin này vào thư mục res/raw/ và sử dụng:

myWebView.loadUrl("file:///android_res/raw/myfile.html"); 

sau đó chỉ giả lập android mức 2.2 API 8 có thể tải các tập tin có lẽ, các phiên bản cũ khác hiển thị các lỗi tương tự. Tui bỏ lỡ điều gì vậy?

Có cách nào để tải tệp .html hiện có trong gói ứng dụng hoạt động trên tất cả các phiên bản API không?

+0

Xin lỗi, bài sai. – user2422690

Trả lời

137

ok, đó là sai lầm rất ngu ngốc của tôi. Tôi đăng câu trả lời ở đây chỉ trong trường hợp ai đó có cùng một vấn đề.

Đường dẫn chính xác cho các tệp được lưu trữ trong thư mục nội dung là file:///android_asset/* (không có "s" cho thư mục nội dung mà tôi luôn nghĩ rằng nó phải có "s").

Và, mWebView.loadUrl("file:///android_asset/myfile.html"); hoạt động theo tất cả các cấp API.

Tôi vẫn không tìm ra lý do tại sao mWebView.loadUrl("file:///android_res/raw/myfile.html"); chỉ hoạt động ở cấp API 8. Nhưng hiện tại không quan trọng.

+44

FWIW Tôi không nghĩ đó là một sai lầm ngu ngốc. Tôi đã phạm sai lầm như vậy, hai lần. Nó không trực quan! Trước tiên, hãy tạo một thư mục có tên là "asset", sau đó gọi nó là "android_asset" (no "s") ?? Đó là nền tảng ngu xuẩn đó, IMO: P – richtaur

+1

đến lỗi 'nguyên' không hoạt động. Tôi sẽ sử dụng cho 'raw-de',' raw-fr'và cứ thế. Bây giờ tôi phải tự làm. – Martin

+0

tôi đã thử cùng một cách hướng dẫn bởi laph nhưng khi tôi đặt tập tin xml của tôi trong thư mục được đề cập bởi bạn myWebView.loadUrl ("file: ///android_res/raw/myfile.xml"); Nó cho tôi lỗi rằng Hãy chắc chắn rằng internet hoặc đường dẫn là chính xác và khi tôi viết myWebView.loadUrl ("file: //android_res/raw/myfile.xml"); nó không đưa ra bất kỳ lỗi nào nhưng nó cũng cho thấy không có gì. Xin hãy giúp tôi trong việc này. – Aditya1510

1

Bạn có thể đọc tệp html theo cách thủ công và sau đó sử dụng phương thức loadData hoặc loadDataWithBaseUrl của WebView để hiển thị.

+0

Xin chào Lucho, cảm ơn câu trả lời của bạn. Bạn có nghĩa là tôi phải chuyển đổi tập tin .html của tôi thành String, sau đó tải nó với phương thức loadData hoặc loadDataWithBaseUrl? – laph

+1

tệp .html của tôi khá lớn để chuyển đổi thành chuỗi nhanh chóng. Bất kỳ ý tưởng để tải nó với đường dẫn tuyệt đối? – laph

15

dán tệp .html của bạn vào thư mục nội dung của thư mục dự án của bạn. và tạo ra một tập tin xml trong thư mục layout với mã fol: my.xml:

<WebView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/webview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

thêm mã fol trong hoạt động

setContentView(R.layout.my); 
    WebView mWebView = null; 
    mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.loadUrl("file:///android_asset/new.html"); //new.html is html file name. 
6

Copy và Paste tập tin .html của bạn trong thư mục tài sản của Dự án của bạn và thêm mã bên dưới vào Hoạt động của bạn trên onCreate().

 WebView view = new WebView(this); 
     view.getSettings().setJavaScriptEnabled(true); 
     view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html"); 
     view.setBackgroundColor(Color.TRANSPARENT); 
     setContentView(view); 
7

Nếu cấu trúc của bạn nên là như thế này:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

Sau đó chỉ cần làm (Android WebView: handling orientation changes)

if(WebViewStateHolder.INSTANCE.getBundle() == null) { //this works only on single instance of webview, use a map with TAG if you need more 
     webView.loadUrl("file:///android_asset/html/index.html"); 
    } else { 
     webView.restoreState(WebViewStateHolder.INSTANCE.getBundle()); 
    } 

Hãy chắc chắn rằng bạn thêm

WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     webSettings.setAllowFileAccessFromFileURLs(true); 
     webSettings.setAllowUniversalAccessFromFileURLs(true); 
    } 

Sau đó, chỉ cần sử dụng các url

<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Zzzz</title> 
    <script src="../scripts/index.js"></script> 
    <link rel="stylesheet" type="text/css" href="../css/index.css"> 
-4

Ngoài ra hãy chắc chắn rằng bạn đừng quên:

<uses-permission android:name="android.permission.INTERNET" />

+1

Đó là địa phương .. anh ấy không cần phải thêm '' anh ta không truy cập Internet ... –

+0

công việc của tôi từ tôi ,,,, ,, khi chúng tôi cố gắng tải hình ảnh url từ tải tệp html throgh Webview, sau đó, hãy thêm quyền này –

Các vấn đề liên quan