2013-01-19 36 views
9

पर टेक्स्ट प्राप्त करें ठीक है, इसलिए मैं एंड्रॉइड के लिए नया हूं और मैं पूरे टेक्स्ट को एक वेब पेज से स्ट्रिंग में प्राप्त करना चाहता हूं। मुझे इस तरह के बहुत सारे प्रश्न मिले लेकिन जैसा कि मैंने कहा कि मैं एंड्रॉइड के लिए नया हूं और मुझे नहीं पता कि मेरे ऐप में उनका उपयोग कैसे किया जाए। मुझे त्रुटियां मिल रही हैं। केवल एक विधि जिसे मैं इसे काम करने में कामयाब रहा, यह वेबव्यू और जावास्क्रिप्ट का उपयोग करता है और यह नरक के रूप में धीमा है। क्या कोई मुझे ऐसा करने के लिए किसी अन्य तरीके से बता सकता है या वेबव्यू को तेज़ी से कैसे बढ़ा सकता है क्योंकि मैं इसे सामग्री देखने के लिए बिल्कुल उपयोग नहीं करता हूं। BTW मैं 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); 

तेजी लाने के लिए निम्नलिखित कोड जोड़ दिया है और तुम WebView का उपयोग कर के अलावा अन्य बेहतर और तेज समाधान पता मुझे मुख्य गतिविधि की पूरी स्रोत कोड दे या समझाने मैं कहाँ माना जाता रहा हूँ कृपया अगर कृपया इसे लिखने के लिए मुझे त्रुटियां नहीं मिलतीं .. अग्रिम धन्यवाद !!

+0

आप एक विशेष एचटीएमएल तत्व से बाहर केवल पाठ चाहते हैं, आप [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 

मेक सुनिश्चित करें कि आप इसे मुख्य यूआई थ्रेड को 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() और अन्य कोड को ऑनक्रेट() के बाहर सही रखना चाहिए? यदि यह सही है, तो मुझे TAG पर त्रुटि मिल रही है - TAG को एक चर के लिए हल नहीं किया जा सकता है। इसे कैसे ठीक करें? और स्ट्रिंग लाइन पृष्ठ से पूरा पाठ सही है? – null

+0

हां। स्ट्रिंग लाइन एक स्ट्रिंग के रूप में पूरी प्रतिक्रिया है। और TAG बस एक स्ट्रिंग वैरिएबल है जिसे मैंने पहले परिभाषित किया था। इसे अपनी चोकी की किसी भी स्ट्रिंग से प्रतिस्थापित करें। मैंने अपना जवाब संशोधित कर दिया है। और हाँ, जब आप डाउनलोड शुरू करना चाहते हैं तो आप कहीं भी नया RequestTask() डाल सकते हैं। –

संबंधित मुद्दे