2012-05-22 54 views
5

Sau khi xử lý một tập tin, tôi nhận được một chuỗi HTML trong đó hình ảnh được thiết lập như làAndroid: Hiển thị hình ảnh trong Webview

<img src="abc.001.png" width="135" height="29" alt="" style="margin-left:0pt; margin-top:0pt; position:absolute; z-index:-65536" /> 

Đường dẫn của hình ảnh không nên được sửa đổi bởi vì tôi phải chọn mục tập tin từ một danh sách. Hình ảnh nằm trong cùng thư mục với tệp. Tôi tải chuỗi HTML bằng cách sử dụng loadData/loadDataWithBaseURL, nhưng hình ảnh không được hiển thị. Tôi chỉ thấy khung của nó.

Làm cách nào để khắc phục sự cố này? Và tôi có thể áp dụng giải pháp đó trong trường hợp tôi có nhiều hình ảnh được lập chỉ mục như .001.jpg, .002.png, v.v ... (tất cả trong một thư mục) không?

Cập nhật: Cảm ơn, nó hoạt động với câu lệnh loadUrl() bất kể tôi đặt tên hình ảnh như thế nào. Trong thực tế, tôi phải đọc và xử lý nội dung trước khi tải nó trong WebView. Đó là lý do tại sao tôi sử dụng câu lệnh loadDataWithBaseUrl() và nhận được sự cố ở trên. Đây là mã của tôi trong dự án thử nghiệm để đọc và hiển thị nội dung của Test.html.

String res = "";   
    File file = new File(Environment.getExternalStorageDirectory()+"/Test.html"); 
    try { 
     FileInputStream in = new FileInputStream(file); 

     if (in != null) {    
      BufferedReader buffreader = new BufferedReader(
        new InputStreamReader(in)); 
      String line; 
      while ((line = buffreader.readLine()) != null) { 
       res += line; 
      } 
      in.close(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }  
    wv.loadDataWithBaseURL(null, res, "text/html", "utf-8", null); 
    //wv.loadUrl("file://"+Environment.getExternalStorageDirectory()+"/Test.html"); 

Tuyên bố trong // hoạt động nhưng đó không phải là những gì tôi có thể làm trong dự án thực của tôi. Tôi có một giải pháp: sau khi xử lý nội dung tôi phải lưu nó trong một tệp HTML tạm thời sau đó tải nó, tệp đó sẽ bị xóa sau này. Tuy nhiên, tôi vẫn mong đợi một giải pháp tốt hơn :)

Trả lời

9

Cố gắng thay đổi tên của tệp hình ảnh. Tôi nghĩ điều này là do dấu chấm kép trong tên.

<img id="compassRose" src="CompassRose.jpg"></img> 

này đang làm việc cho tôi ....

Code:

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.webkit.WebView; 

public class StackOverFlowActivity extends Activity { 

    private Handler mHandler = new Handler(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     WebView view=(WebView)findViewById(R.id.webView1); 
     view.getSettings().setJavaScriptEnabled(true); 
     view.loadUrl("file:///android_asset/index.html"); 
     view.addJavascriptInterface(new MyJavaScriptInterface(), "Android"); 
    } 

    final class MyJavaScriptInterface 
    { 
     public void ProcessJavaScript(final String scriptname, final String args) 
      {    
       mHandler.post(new Runnable() 
        { 
         public void run() 
          { 
           //Do your activities 
          } 
        }); 
      } 
    } 
} 

index.html:

<html> 
<head> 
    <title title="Index"></title>         
</head> 

<body> 
    <h2>Android App demo</h2> 
    <br /> <img src="CompassRose.jpg" /> 
</body> 
</html> 

enter image description here

Kết quả:

enter image description here

+0

tôi đã thực hiện một dự án Android chỉ để thử nghiệm với tên "abc.jpg".Không có gì khác biệt, WebView chỉ hiển thị khung hình ảnh. Vì vậy, tôi nghĩ rằng WebView không nhận ra phần src không phải vì tên hình ảnh. Thật không may tôi không thể đưa vào tập tin đường dẫn đầy đủ của hình ảnh. –

+0

Xem mã đã chỉnh sửa, tính năng này đang hoạt động cho tôi .... bạn đã thử như thế này chưa? – Ponmalar

+0

Nếu bạn có giải pháp, hãy chấp nhận điều này là Câu trả lời – Ponmalar

1

Vấn đề của bạn là với dòng:

wv.loadDataWithBaseURL(null, res, "text/html", "utf-8", null); 

Tham số đầu tiên (baseurl) là null. Vì lý do nào đó, WebView sau đó từ chối tải bất kỳ tài nguyên được liên kết nào ngay cả khi bạn sử dụng URL tuyệt đối. Bạn có thể thấy rằng nó sẽ làm việc nếu bạn thay đổi mã của bạn để (giả hình ảnh của bạn được lưu trữ trong thư mục bên ngoài):

wv.loadDataWithBaseURL ("file://" + Environment.getExternalStorageDirectory(), res, "text/html", "utf-8", null); 

Ghi thêm quyền thích hợp nếu bạn tham khảo các nguồn trên mạng:

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

Xin lỗi, một chút trễ trong câu trả lời của tôi. Tôi đã nghiên cứu một vấn đề tương tự khi tôi đi qua bài đăng này.

+0

Có cùng vấn đề, tất cả những gì tôi đã bỏ lỡ là 'Environment.getExternalStorageDirectory() 'in' wv.loadDataWithBaseURL ("file: //" + Environment.getExternalStorageDirectory(), res, "text/html", "utf-8", null); ' –

0

chỉ cần sử dụng:

webview.loadUrl("file:///android_asset/mypicture.jpg"); 
0
 WebView webView=(WebView)findViewById(R.id.my_wb); 
     String url = "YOUR URL"; 
     webView.getSettings().setLoadsImagesAutomatically(true); 
     webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     webView.loadUrl(url); 
+3

Chào mừng bạn đến với StackOverflow. Mặc dù câu trả lời này có thể hoạt động, vui lòng xem xét thêm thông tin/mô tả để giúp người dùng khác hiểu ý bạn là gì. Cảm ơn. –

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