2015-04-29 6 views
1

Я пытаюсь открыть локальный html-файл в своем приложении для Android.Открыть файл HTML из папки с ресурсами

Файл находится в моей папке с активами. Поэтому я устанавливаю WebViewClient и загружаю в него свою страницу. Но я получаю сообщение об ошибке «webpage not available».

Вот мой код активность:

public class LocalDialogActivity extends Activity { 

    protected WebView webView; 
    private static final String ENROLLMENT_URL = "file:///assets/enrollment.html"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_local_dialog); 

     webView = (WebView)findViewById(R.id.local_dialog_webview); 
     webView.setWebViewClient(new WebViewClient()); 

     webView.getSettings().setUseWideViewPort(true); 
     webView.getSettings().setLoadWithOverviewMode(true); 

     webView.getSettings().setSupportZoom(true); 
     webView.getSettings().setBuiltInZoomControls(true); 
     webView.getSettings().setDisplayZoomControls(false); 


     refreshWebView(webView); 

    } 

    public void refreshWebView(View view) { 
     webView.loadUrl(ENROLLMENT_URL); 
    } 

и файл макета:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <WebView 
     android:id="@+id/local_dialog_webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</RelativeLayout> 

И у меня есть разрешение Интернет в моем файле AndroidMainfest.xml, который имеет доступ к интернету:

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

Любая помощь будет радушна. Спасибо.

+0

Можете ли вы разместить свои сообщения в журнале? –

+0

Возможный дубликат [как читать содержимое html из папки ресурсов в android] (https://stackoverflow.com/questions/8603222/how-to-read-html-content-from-assets-folder-in-android) – Suhaib

ответ

6

Попробуйте использовать следующий код для загрузки HTML

"file:///android_asset/enrollment.html" 

вместо

"file:///assets/enrollment.html" 
+0

Спасибо, это сработало для меня :) – saloua

1

Этот код он работает

public class WebActivity extends Activity { 
    WebView wv; 

String url="file:///android_asset/sample.html"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_web); 
    wv=(WebView)findViewById(R.id.webUrl_WEB); 



WebSettings webSettings = wv.getSettings(); 
    wv.getSettings().setLoadWithOverviewMode(true); 
    wv.getSettings().setUseWideViewPort(true); 
    wv.getSettings().setBuiltInZoomControls(true); 
    wv.getSettings().setPluginState(PluginState.ON); 


    wv.setWebViewClient(new myWebClient()); 

    wv.loadUrl(url); 
} 




public class myWebClient extends WebViewClient { 
    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     // TODO Auto-generated method stub 
     super.onPageStarted(view, url, favicon); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     // TODO Auto-generated method stub 

     view.loadUrl(url); 
     return true; 

    } 
} 

Вы должны иметь права доступа в AndroidMainfest.xml файл, который имеет доступ к интернету:

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

Вам нужен файл sample.html помещен под активу папка

+0

спасибо, но я установил разрешение для Интернета в файле манифеста. – saloua

5

Если ваша структура должна быть такой:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

Тогда просто сделать (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()); 
    } 

Убедитесь, что вы добавить

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

Тогда просто использовать URLs

<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"> 
2

Я думаю, это лучше использовать "сырую" папку. Этот код работает правильно.

InputStream is = getResources().openRawResource(R.raw.html_file); 

    try { 
     int size = is.available(); 
     byte[] buffer = new byte[size]; 
     is.read(buffer); 
     is.close(); 
     String str = new String(buffer); 
     }catch (IOException e){ 
      e.printStackTrace(); 
     } 
     webView.loadDataWithBaseURL("", str, "text/html", "UTF-8", ""); 
0

Скачать исходный код отсюда (Open html file from assets android)

MainActivity.java

package com.deepshikha.htmlfromassets; 
import android.app.ProgressDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class MainActivity extends AppCompatActivity { 

WebView webview; 
ProgressDialog progressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
init(); 
} 

private void init(){ 
webview = (WebView)findViewById(R.id.webview); 
webview.loadUrl("file:///android_asset/download.html"); 
webview.requestFocus(); 

progressDialog = new ProgressDialog(MainActivity.this); 
progressDialog.setMessage("Loading"); 
progressDialog.setCancelable(false); 
progressDialog.show(); 

webview.setWebViewClient(new WebViewClient() { 

public void onPageFinished(WebView view, String url) { 
try { 
progressDialog.dismiss(); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
}); 
} 
} 

Спасибо!

Смежные вопросы