【问题标题】:Jsoup parsing with AndroidJsoup用Android解析
【发布时间】:2013-08-27 16:54:02
【问题描述】:

我正在尝试使用 Jsoup lib 解析 html。然而,我没有得到我想要的。 我想将标签<pre>的整个文本带到移动设备的屏幕上

请告诉我,如何从网络获取文本?我需要如何解决?

网址:http://devanswers.ru/text.php

package com.example.devanswers;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView DevMainText;
    ImageView DevMainImage;
    MyTask DevMain;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DevMainText = (TextView) findViewById(R.id.DevMainText);
        DevMainImage = (ImageView) findViewById(R.id.DevMainImage);

        OnClickListener onClick = new OnClickListener() {
            public void onClick(View v) {

                DevMain = new MyTask();
                DevMain.execute();
            }
        };

        DevMainImage.setOnClickListener(onClick);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    class MyTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            DevMainImage.setEnabled(false);
        }

        @Override
        protected Void doInBackground(Void... params) {
            Document doc;
            try {
                doc = Jsoup.connect("http://devanswers.ru/text.php").get();
                Elements links = doc.getElementsByTag("pre");
                for (Element link : links) {
                    DevMainText.setText((link.text()));
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                DevMainText.setText("Error");
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            DevMainImage.setEnabled(true);
        }
    }

}

【问题讨论】:

    标签: android html-parsing jsoup


    【解决方案1】:

    我以前从未使用过 Jsoup,但我可以从您的代码中看到,每次从页面获取数据时,您都会重写 DevMainText 中的内容

    所以你应该像这样在你的文本视图中设置文本:

    String maintext = "";
       for (Element link : links) {
        maintext += link.text() +"\n";
       }
    DevMainText.setText(maintext);
    

    【讨论】:

      【解决方案2】:

      事实上,响应没有包含在&lt;pre&gt; 标记中。当您查看源代码时,浏览器会将原始响应包装在 &lt;pre&gt; 标记中。

      代替doc.getElementsByTag("pre") 试试doc.getElementsByTag("body")

      【讨论】:

        【解决方案3】:

        如果您想显示整个页面,也可以尝试使用 Android WebView 组件。 http://developer.android.com/reference/android/webkit/WebView.html

        您可以使用 URI 类
        Uri uri = Uri.parse("http://devanswers.ru/text.php");轻松解析页面,然后将其显示在 WebView 中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-22
          • 1970-01-01
          • 2013-09-21
          • 1970-01-01
          • 1970-01-01
          • 2013-11-25
          • 2013-03-26
          相关资源
          最近更新 更多