Android html代码中的webView.loadData不';行不通

Android html代码中的webView.loadData不';行不通,android,webview,loaddata,Android,Webview,Loaddata,我有一个全屏web视图,其中: 1) 我将xml文件发送到php脚本 2) php脚本使用javascript构建页面并回显整个代码 3) webview加载(应该加载)结果 从脚本中读取结果,我可以看到整个html代码,但是web视图没有加载它。以下是带有结果页的日志: 这就是我处理请求/响应客户端的方式: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc

我有一个全屏web视图,其中:
1) 我将xml文件发送到php脚本
2) php脚本使用javascript构建页面并回显整个代码
3) webview加载(应该加载)结果

从脚本中读取结果,我可以看到整个html代码,但是web视图没有加载它。以下是带有结果页的日志:

这就是我处理请求/响应客户端的方式:

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

    final String url = "http://www.mysite.meh/google_api/test.php";
    String selected = getIntent().getStringExtra("com.example.simplerun.filename");
    final File file = new File("/storage/sdcard0/SimpleRun/"+selected + ".xml");
    Log.i("FILE SIZE: ", "" + file.length());

    final WebView mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    mWebView.getSettings().setSaveFormData(true);
    mWebView.setWebViewClient(new MyWebViewClient());

    Thread thread = new Thread()
    {
        public void run()
        {

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);

    try {
      MultipartEntity entity = new MultipartEntity();

      entity.addPart("userfile", new FileBody(file));
      httppost.setEntity(entity);
      HttpResponse response = httpclient.execute(httppost);
      String res = EntityUtils.toString(response.getEntity());
        Log.i("RESPONSE: ", res);
        //String uri = Uri.encode(res);
        mWebView.loadData(res, "text/html; charset=UTF-8", null);
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }
        }
    };
    thread.start();

    try
    {
        thread.join();

    }
    catch(InterruptedException e)
    {
        e.printStackTrace();
    }



    /*
    Thread thread = new Thread()
    {
        public void run()
        {
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(url);
            client.getParams().setParameter("userfile", file);

            try
            {
                HttpResponse response = client.execute(post);
                String res = EntityUtils.toString(response.getEntity());
                Log.i("RESPONSE: ", res);
                mWebView.loadData(res, "text/html", HTTP.UTF_8);

            }
            catch(ClientProtocolException e)
            {
                e.printStackTrace();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
    };
    thread.start();

    try
    {
        thread.join();
    }
    catch(InterruptedException e)
    {
        e.printStackTrace();
    }

    */

    /*
    WebView mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    mWebView.getSettings().setSaveFormData(true);
    mWebView.setWebViewClient(new MyWebViewClient());
    */
}

private class MyWebViewClient extends WebViewClient {
    @Override
    // show the web page in webview but not in web browser
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

}
}


当活动开始时,屏幕保持空白,我哪里做错了?

我建议
loadDataWithBaseURL

webView.loadDataWithBaseURL(null, result, "text/html", "utf-8", "about:blank");

我会推荐
loadDataWithBaseURL

webView.loadDataWithBaseURL(null, result, "text/html", "utf-8", "about:blank");
试试这个

webView.loadData(res, "text/html", "UTF-8") instead.
另外,我建议您使用AsyncTask。将其创建为内部类。在AsyncTask的doInBackground()方法中执行所有http操作。然后在AsyncTask的onPostExecute()方法中调用webView.loadData(…)

当然,您必须将Webview实例声明为外部类中的实例变量(而不是在onCreate中定义它),以便在内部AsyncTask类中访问它。

试试这个

webView.loadData(res, "text/html", "UTF-8") instead.
另外,我建议您使用AsyncTask。将其创建为内部类。在AsyncTask的doInBackground()方法中执行所有http操作。然后在AsyncTask的onPostExecute()方法中调用webView.loadData(…)


当然,您必须将Webview实例声明为外部类中的实例变量(而不是在onCreate中定义),以便在内部AsyncTask类中访问它。

您在后台线程中访问web,因此需要确保输出到UI线程:

runOnUiThread(new Runnable() {
    public void run() {
        mWebView.loadData(res, "text/html; charset=UTF-8", null);
    }
});

您在后台线程中访问web,因此需要确保输出到UI线程:

runOnUiThread(new Runnable() {
    public void run() {
        mWebView.loadData(res, "text/html; charset=UTF-8", null);
    }
});

感谢您的回复,但我得到了相同的结果,我可以在logcat中读取整个html代码,但屏幕上没有任何显示:(这可能是因为您的html数据。WebView必须将html代码呈现为元素,因此确保html数据可以在浏览器中呈现,元素包括html、正文、标题等。在此之前,我尝试显示相同的内容,但有一点不同:xml文件未发送,但已经在服务器上,唯一认为活动已发送的是cont操作一个url并显示结果,在这种情况下,地图显示正确,因此我认为这不是渲染问题(如果我尝试使用浏览器,也可以正常工作)嗯,我根据日志中的结果制作了一个html文档,你是对的,屏幕是空白的,必须理解错误。谢谢你回复我,但我有相同的结果,我可以在logcat中读取整个html代码,但屏幕上什么也没有发生:(这可能是因为您的html数据。WebView必须将html代码呈现为元素,因此确保html数据可以在浏览器中呈现,元素包括html、正文、标题等。在此之前,我尝试显示相同的内容,但有一点不同:xml文件未发送,但已经在服务器上,唯一认为活动已发送的是cont动作一个url并显示结果,在这种情况下地图显示正确,所以我不认为这是一个渲染问题(如果我尝试使用浏览器,也可以正常工作)嗯,我根据日志中的结果制作了一个html文档,你是对的,屏幕是空白的,必须了解出了什么问题