HTMLcleaner in AsyncTask



我试图让HTML更干净,从一个网站解析信息,然后使用Xpath找到我正在寻找的数据。我有htmlcleaner的东西在一个单独的AsyncTask类和应用程序似乎在我的手机上工作。然而,当我按下按钮时,什么也没发生。这是我的主要活动类和我的AsyncTask类。

package ru.habrahabr.stackparser;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.htmlcleaner.TagNode;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
public class stackParser extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button button = (Button) findViewById(R.id.parse);
    button.setOnClickListener(myListener);
}
private OnClickListener myListener = new OnClickListener() {
    public void onClick(View v) {
        new parseSite().execute("http://xjaphx.wordpress.com/");
    }
};
private class parseSite extends AsyncTask<String, Void, String> {
    protected String doInBackground(String... arg) {
        String output = new String();
        try {
            htmlHelper hh = new htmlHelper();
        } finally {
        }
        return output;
    }
    protected void onPostExecute(String output) {
        TextView view = (TextView) findViewById(R.id.tv1);
        view.setText((CharSequence) output);
    }
}
}

这是我引用的类。如果有人能看看这个,告诉我发生了什么,我会很感激的。我试图遵循一个工作的例子,把我自己的Url和Xpath,但它不工作。

package ru.habrahabr.stackparser;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
import org.htmlcleaner.XPatherException;
public class htmlHelper {
TagNode rootNode;
String stats;
static final String XPATH_STATS = "//div[@id='blog-stats']/ul/li";

public String htmlHelper(URL htmlPage) throws IOException, XPatherException {
    HtmlCleaner cleaner = new HtmlCleaner();
    rootNode = cleaner.clean(htmlPage);
    // query XPath
    Object[] statsNode = rootNode.evaluateXPath(XPATH_STATS);
    // process data if found any node
    if (statsNode.length > 0) {
        TagNode resultNode = (TagNode) statsNode[0];
        stats = resultNode.getText().toString();
    }
    return stats;
}
}

AsyncTask的doInBackground方法更改为:

@Override
protected String doInBackground(String... arg) {
        String output "";
        try {
            htmlHelper hh = new htmlHelper();
            output=hh.htmlHelper(arg[0]);  //<< call htmlHelper method here
        } finally {
        }
        return output;
    }

因为您目前只创建htmlHelper类的实例,而不是从htmlHelper类调用htmlHelper方法来从web url获取数据

看,我不会关心数据是否下载,但我会假设数据已经下载,除了在变量output中,您只需要将此代码放入onPostExecute

 runOnUiThread(new Runnable() {
 public void run() {
// update data into TextView.
  TextView view = (TextView) findViewById(R.id.tv1);
view.setText((CharSequence) output);
                    }
                });

因为,有时数据已经下载,但需要被分配到Textview或任何视图通过使用线程。希望这对你有用

相关内容

  • 没有找到相关文章