2013-01-19 14 views
9

これは私がアンドロイドを初めて使ったため、ウェブページ全体を文字列にしたいのです。私はこのような多くの質問を見つけましたが、私はアンドロイドには新しく、アプリでどのように使用するのか分かりませんでした。私はエラーが発生しています。私がそれを稼働させるために管理したメソッドは1つしかなく、WebViewとJavaScriptを使用していて、地獄のように遅いです。誰かが、これを行うための他の方法や、WebViewをスピードアップする方法を私に教えてください。私はコンテンツを見るためにそれをまったく使用しないからです。 ところで、私はあなたがWebViewのを使用するよりも、他のより良く、より速く解決策を知っていれば私の主な活動の全体のソースコードをお願いしたり、私がなってるところを説明WebViewのウェブページから文字列にテキストを取得する

webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setBlockNetworkImage(true); 
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false); 
    webView.getSettings().setPluginsEnabled(false); 
    webView.getSettings().setSupportMultipleWindows(false); 
    webView.getSettings().setSupportZoom(false); 
    webView.getSettings().setSavePassword(false); 
    webView.setVerticalScrollBarEnabled(false); 
    webView.setHorizontalScrollBarEnabled(false); 
    webView.getSettings().setAppCacheEnabled(false); 
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 

をスピードアップするために、次のコードを追加してくださいました私はエラーが発生しないようにそれを書き込むために..先験に感謝!あなたがこれを使用することができますURLからソースコードを取得するために

+0

あなたが特定のHTML要素のうちテキストだけをしたい場合は、[JSoup](http://jsoup.org/)を見てみることができます。 –

答えて

27

これを使用してタスクを実行することができます使用コードです:

public class ReadWebpageAsyncTask extends Activity { 
    private TextView textView; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     textView = (TextView) findViewById(R.id.TextView01); 
    } 

    private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... urls) { 
      String response = ""; 
      for (String url : urls) { 
       DefaultHttpClient client = new DefaultHttpClient(); 
       HttpGet httpGet = new HttpGet(url); 
       try { 
        HttpResponse execute = client.execute(httpGet); 
        InputStream content = execute.getEntity().getContent(); 

        BufferedReader buffer = new BufferedReader(
          new InputStreamReader(content)); 
        String s = ""; 
        while ((s = buffer.readLine()) != null) { 
         response += s; 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      return response; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      textView.setText(Html.fromHtml(result)); 
     } 
    } 

    public void readWebpage(View view) { 
     DownloadWebPageTask task = new DownloadWebPageTask(); 
     task.execute(new String[] { "http://www.google.com" }); 

    } 
} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <Button android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/readWebpage" android:onClick="readWebpage" android:text="Load Webpage"></Button> 
    <TextView android:id="@+id/TextView01" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Example Text"></TextView> 
</LinearLayout> 
+0

http://ddceutkal.org/SSDC_GD.pdf @K_Anasの内容を読み、一部のテキストビューで表示する方法-nulll –

+1

すべて非推奨です... –

2

あなたがすべてでコンテンツを表示するに興味を持っていないとして、次のように使用してみてください見て

HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client 
HttpGet httpget = new HttpGet("http://yoururl.com"); // Set the action you want to do 
HttpResponse response = httpclient.execute(httpget); // Executeit 
HttpEntity entity = response.getEntity(); 
InputStream is = entity.getContent(); // Create an InputStream with the response 
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
StringBuilder sb = new StringBuilder(); 
String line = null; 
while ((line = reader.readLine()) != null) // Read line by line 
    sb.append(line + "\n"); 

String resString = sb.toString(); // Result is here 

is.close(); // Close the stream 

メイクこれをメインのUIスレッドAsyncTaskまたはThreadに入れて実行してください。

5

これは私が一般的に

class RequestTask extends AsyncTask<String, String, String>{ 

@Override 
// username, password, message, mobile 
protected String doInBackground(String... url) { 
    // constants 
    int timeoutSocket = 5000; 
    int timeoutConnection = 5000; 

    HttpParams httpParameters = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
    HttpClient client = new DefaultHttpClient(httpParameters); 

    HttpGet httpget = new HttpGet(url[0]); 

    try { 
     HttpResponse getResponse = client.execute(httpget); 
     final int statusCode = getResponse.getStatusLine().getStatusCode(); 

     if(statusCode != HttpStatus.SC_OK) { 
      Log.w("MyApp", "Download Error: " + statusCode + "| for URL: " + url); 
      return null; 
     } 

     String line = ""; 
     StringBuilder total = new StringBuilder(); 

     HttpEntity getResponseEntity = getResponse.getEntity(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(getResponseEntity.getContent())); 

     while((line = reader.readLine()) != null) { 
      total.append(line); 
     } 

     line = total.toString(); 
     return line; 
    } catch (Exception e) { 
     Log.w("MyApp", "Download Exception : " + e.toString()); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(String result) { 
    // do something with result 
} 
} 

インターネットから文字列をダウンロードし、あなたは

new RequestTask().execute("http://www.your-get-url.com/");

+0

私は新しいRequestTask()をonCreate()に入れ、他のコードはonCreate()の外に置くべきですか?それが正しい場合は、TAGにエラーが発生しています.TAGは変数に解決できません。これを修正する方法は?文字列の行はページ右のテキスト全体ですか? – null

+0

はい。文字列は文字列としての応答全体です。 TAGは前に定義した文字列変数です。あなたのchocieの任意の文字列で置き換えます。私は自分の答えを修正しました。そして、はい、ダウンロードを開始したいときはいつでも、新しいRequestTask()を置くことができます。 –

関連する問題