2013-10-04 4 views
0

i ont une vue web plein écran, où:
1) i envoyer un fichier xml à un script php
2) le script php construire la page en utilisant javascript et écho retour le code entier
3) le webview charge (devrait charger) le résultat.webView.loadData à partir du code html ne fonctionne pas

En lisant le résultat du script, je peux voir le code html entier, mais la vue web ne le charge pas. voici le logcat avec la page de résultats: http://pastebin.com/yjKK10SY

et voilà comment je Manipulez le côté client demande/réponse:

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

} 

}

lorsque le démarrage de l'activité, l'écran restent vides, où je fais mal?

Répondre

0

Je recommned loadDataWithBaseURL

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

Merci de me répondre, mais je le même résultat identique, je peux lire la code html entier dans logcat mais rien n'arrive à l'écran :( – Fujitina

+0

C'est probablement à cause de vos données html WebView doit rendre le code html en éléments, donc assurez-vous que les données html peuvent être rendues dans un navigateur, éléments html, corps, title, .... –

+0

avant cela j'essaie d'afficher la même chose, avec une différence: le fichier xml n'a pas été envoyé, mais déjà sur le serveur, le seul pense que l'activité a fait, est de contacter une URL et montrer le résultat , dans ce cas, la carte était correctement affiché, donc je ne pense pas que c'est un problème de rendu (et si j'essaye avec un navigateur tout fonctionne bien aussi) – Fujitina

2

Essayez cette

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

Aussi, je vais plutôt vous suggère d'utiliser AsyncTask. Créez-le en classe interne. Effectuez toutes vos opérations http dans votre méthode doInBackground() de AsyncTask. Ensuite, appelez webView.loadData (...) dans la méthode onPostExecute() de AsyncTask. Bien sûr, vous devrez déclarer votre instance de Webview en tant que variable d'instance dans votre classe externe (au lieu de la définir dans onCreate) afin de la rendre accessible dans la classe AsyncTask interne.

0

vous accédez au Web dans un thread d'arrière-plan, de sorte que vous devez vous assurer que vous la sortie du thread d'interface utilisateur:

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