0

ここで、
1) xml ファイルを php スクリプトに送信します
。2) php スクリプトは、javascript を使用してページを構築し、コード全体をエコー バックします
。3) webview は結果をロードします (ロードする必要があります)。

スクリプトから結果を読み取ると、html コード全体が表示されますが、Web ビューでは読み込まれません。ここに結果ページのある logcat があります: http://pastebin.com/yjKK10SY

そして、これは私が要求/応答クライアント側を処理する方法です:

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

}

}

アクティビティの開始時に画面が空白のままになりますが、どこが間違っていますか?

4

3 に答える 3

2

これを試して

webView.loadData(res, "text/html", "UTF-8") instead.

また、AsyncTask を使用することをお勧めします。内部クラスとして作成します。AsyncTask の doInBackground() メソッドですべての http 操作を実行します。そして、AsyncTask の onPostExecute() メソッドで webView.loadData(...) を呼び出します。

もちろん、内部の AsyncTask クラスでアクセスできるようにするには、(onCreate 内で定義するのではなく) 外部クラスで Webview インスタンスをインスタンス変数として宣言する必要があります。

于 2013-10-04T15:19:25.127 に答える
0

バックグラウンド スレッドで Web にアクセスするため、必ず UI スレッドに出力する必要があります。

runOnUiThread(new Runnable() {
    public void run() {
        mWebView.loadData(res, "text/html; charset=UTF-8", null);
    }
});
于 2013-11-04T18:47:35.443 に答える