【问题标题】:HTMLcleaner in AsyncTaskAsyncTask 中的 HTMLcleaner
【发布时间】:2012-12-25 05:38:08
【问题描述】:

我正在尝试使用 HTML 清洁器来解析来自网站的信息,然后使用 Xpath 来查找我正在寻找的数据。我在一个单独的 AsyncTask 类中有 htmlcleaner 的东西,该应用程序似乎可以在我的手机上运行。但是,当我按下按钮时,什么也没有发生。这是我的主要活动类和我的 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;
}
}

【问题讨论】:

    标签: android string android-asynctask htmlcleaner


    【解决方案1】:

    看,我不关心数据是否下载,但我会假设数据已经下载,除了变量output,你只需要把这段代码放在onPostExecute里面

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

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

    【讨论】:

      【解决方案2】:

      AsyncTaskdoInBackground 方法更改为:

      @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 获取数据

      【讨论】:

        猜你喜欢
        • 2013-10-28
        • 1970-01-01
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 2013-05-14
        • 2010-11-14
        相关资源
        最近更新 更多