2010-12-28 2 views
40

Я хочу загрузить локальный html в WebView БЕЗ использования «file: ///», потому что это не разрешает куки. Есть ли способ использовать что-то вроде «localhost»?Загрузить локальный html в WebView?

Во-вторых, я не смог найти способ включения файлов cookie в getSettings(). Поскольку файлы cookie не разрешены при использовании файла «file: ///».

ответ

95

Вы можете делать только что-то подобное. Эта нагрузка решения HTML из строковых переменных:

String html = "<html><body>Hello, World!</body></html>"; 
String mime = "text/html"; 
String encoding = "utf-8"; 

WebView myWebView = (WebView)this.findViewById(R.id.myWebView); 
myWebView.getSettings().setJavaScriptEnabled(true); 
myWebView.loadDataWithBaseURL(null, html, mime, encoding, null); 

EDIT: попытаться установить первый параметр (BaseUrl) из loadDataWithBaseURL() для ваших нужд

+1

@ user113215: но вы прочитали ссылку на документацию для метода loadDataWithBaseURL(), не так ли? 4-й аргумент называется «encoding», поэтому я назвал переменную «encoding» ..., как вы можете видеть здесь, она используется для выходной кодировки: http://myexperiencewithandroid.blogspot.de/2011/09/android-loaddatawithbaseurl .html ... вы также должны прочитать следующее: http://en.wikipedia.org/wiki/Character_encoding ... поэтому я не вижу вашей проблемы. –

+0

, но здесь нет схемы данных (данных), загружаются только локальные данные HTML, которые должны отображаться в WebView: «Если базовый URL использует схему данных, этот метод эквивалентен вызову loadData() и historyUrl игнорируется ». –

+1

А, это сбивает с толку. Я исследовал источник Android, и вы правы. Использование этого метода с помощью схемы «data:» URL приводит к вызову 'nativeLoadUrl()' (где 'encoding' обозначает кодировку Base64 или URL), но в противном случае этот метод приводит к вызову' nativeLoadData() '(где 'encoding' обозначает набор символов). – user113215

4

Если вы хотите получить доступ к localhost через Android, вам нужно используйте http://10.0.2.2:35643/, где 35643 - это конкретный порт, если необходимо.

13
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     WebView view = (WebView) findViewById(R.id.webView1); 
     try { 
     InputStream input = getResources().openRawResource(R.raw.lights); 
     Reader is = new BufferedReader(
       new InputStreamReader(input, "windows-1252")); 


      //InputStream input = getAssets().open("ws.TXT"); 
      int size; 
      size = input.available(); 
      byte[] buffer = new byte[size]; 
      input.read(buffer); 
      input.close(); 
      // byte buffer into a string 
      javascrips = new String(buffer); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     // String html = readFile(is); 

     view.loadDataWithBaseURL("file:///android_res/raw/", javascrips, "text/html", 
       "UTF-8", null); 
    } 
+0

Хороший фрагмент кода, просто отсутствует определение 'String javascrips;'. –

+0

javascrips - любой текст в HTML-файлах. как ... –

+0

Я принимаю это дополнительный шаг. webview.loadUrl ("Файл: ///android_res/raw/help.html"); – wjl

0

Следующий код работал для меня.

String base64EncodedString = null; 
         try { 
          base64EncodedString = android.util.Base64.encodeToString((preString+mailContent.getBody()+postString).getBytes("UTF-8"), android.util.Base64.DEFAULT); 
         } catch (UnsupportedEncodingException e1) { 
          // TODO Auto-generated catch block 
          e1.printStackTrace(); 
         } 
         if(base64EncodedString != null) 
         { 
          wvMailContent.loadData(base64EncodedString, "text/html; charset=utf-8", "base64"); 
         } 
         else 
         { 
          wvMailContent.loadData(preString+mailContent.getBody()+postString, "text/html; charset=utf-8", "utf-8"); 
9

Попробуйте этот код. Меня устраивает.

WebView mDesc = findViewById(R.id.descWv); 
WebSettings settings = mDesc.getSettings(); 
settings.setDefaultTextEncodingName("utf-8"); 
mDesc.loadData(mDescText, "text/html; charset=utf-8",null); 
+0

Что такое 'mDesc'? Этот ответ бесполезен без него. – Supuhstar

+0

@Supuhstar Спасибо за внимание. «mDesc» - это веб-просмотр. Я редактировал свой код. –

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