2013-01-10 34 views
1

我想讓HTML清理器解析來自網站的信息,然後使用Xpath來查找我正在查找的數據。我有一個單獨的AsyncTask類的HTMLcleaner的東西,該應用程序似乎在我的手機上工作。但是,當我按下按鈕什麼都沒有發生。這是我的主要活動類和我的AsyncTask類。AsyncTask中的HTMLcleaner

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; 
} 
} 

回答

2

變化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類調​​用從網頁URL

+0

是的!謝謝......像魅力一樣工作! – JP409

+0

@ user1830224:最受歡迎的朋友 –

1

看得到數據的情況下,我不會在乎數據是否被下載或者沒有,但是我會假設數據已經被下載,並且除了在變量output之外,喲ü只需要將此代碼放在裏面onPostExecute

runOnUiThread(new Runnable() { 

public void run() { 

// update data into TextView. 

    TextView view = (TextView) findViewById(R.id.tv1); 

view.setText((CharSequence) output); 

        } 
       }); 

,因爲有時數據已經被下載,但需要被分配到的TextView或使用UIthread任何看法。希望這適用於你