2013-11-27 85 views
0

我已經實現了一個基本的東西。用戶通過我的應用程序搜索疾病,結果包含症狀,解決方案等。 我所做的是使用WebView,完整的網站是在webview中。但我的要求是隻顯示搜索結果。 沒有API。我必須從網站HTML源代碼中完成。Android中的HTML解析網站源代碼

我怎麼能這樣做?您的建議表示讚賞。 網站使用:www.webmd.com

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

    editText = (EditText) findViewById(R.id.editText1); 
    button = (Button) findViewById(R.id.button1); 
    webView1 = (WebView) findViewById(R.id.webView1); 

    URL = "http://www.webmd.com/search/search_results/default.aspx?query="; 

    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      data = editText.getText().toString(); 
      URL1 = URL + data.replaceAll(" ", "%20"); 
      Log.v("URL",URL1); 
    //  URL = URL+editText.getText().toString(); 
      if(data.trim().length()>0){ 

       new SearchResult().execute(); 

     // webView1.loadUrl(URL1); 

      /*Intent i = new Intent(MainActivity.this, com.medicaldictonery.View.class); 
      i.putExtra("url", URL1.trim()); 
      startActivity(i);*/ 
      } 
     } 
    }); 
} 

public String getServerDataGET(String targetURL) 
     throws ClientProtocolException, IOException { 
    try { 
     HttpClient client = new DefaultHttpClient(); 
     HttpUriRequest request = new HttpGet(targetURL); 
     Log.v("link", targetURL); 
     HttpResponse response = client.execute(request); 
     String responseBody = ""; 
     HttpEntity entity = response.getEntity(); 

     if (entity != null) { 
      responseBody = EntityUtils.toString(entity); 
      Log.v("test", responseBody); 
     } 

     return responseBody; 

    } catch (Exception e) { 

     e.printStackTrace(); 
     return null; 

    } 
} 
private class SearchResult extends AsyncTask<Void, Void, Void>{ 
    String result1; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog = new ProgressDialog(MainActivity.this); 
     mProgressDialog.setTitle("WebMD"); 
     mProgressDialog.setMessage("Loading..."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     try { 
      // Connect to the web site 
      result1=getServerDataGET(URL1); 
      Log.e("document",result1); 

      Document document = Jsoup.connect(URL1).get(); 
      //Log.e("document",getServerDataGET(URL1)); 
      // Using Elements to get the Meta data 
      Elements description = document 
        .select("div[id=searchResults]"); 
      // Locate the content attribute 
      result1 = description.attr("searchResults"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // Set description into TextView 
     mProgressDialog.dismiss(); 
     webView1.loadData(result1, "text/html; charset=UTF-8", null); 

    } 

} 

}

+0

你或你的公司與webMD有協議嗎?如果你不這樣做,那麼這將違反他們的使用條款。 – RocketSpock

+0

它不是一個現場項目。我是一名實習生,我的任務是獲得選拔。 – user3021522

+0

好的。然後我會稍微發佈一些代碼。暫時看一下'WebView.setChromeClient()'和'WebView.setWebViewClient()'。其中一個應該有一個方法,您可以重載,以便在加載時從頁面獲取HTML。 – RocketSpock

回答

0

爲了得到一個網頁的HTML代碼,你需要創建一個JavaScript接口,然後將打電話進來,並獲得HTML網頁視圖。這裏是一個例子:

public static void loadWebpage(final Context context) { 
    WebView view = new WebView(context); 

    //Enables javascript to get the html 
    view.getSettings().setJavaScriptEnabled(true); 
    view.addJavascriptInterface(new MyJavaScriptInterface(context), "HtmlViewer"); 

    view.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      view.loadUrl("javascript:window.HtmlViewer.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); 
     } 
    }); 

    view.loadUrl("your url"); 
} 

static class MyJavaScriptInterface { 
    private Context _context; 

    MyJavaScriptInterface(Context ctx) { 
     _context = ctx; 
    } 

    //NOTE: If your target API > 16 you must have @JavascriptInterface 
    @SuppressWarnings("UnusedDeclaration") 
    public void showHTML(String html) { 
     //TODO what you need to with the html 
    } 
} 
+0

感謝您的代碼...這是我的代碼,我只想在webview中顯示搜索結果。 – user3021522

+0

我在文章中添加了代碼... – user3021522

+0

我正在使用Jsoup庫。 – user3021522