0

全部 - 我正在解析来自 21 个不同地址的数据,具体取决于用户在微调器中选择的内容。例如,如果用户选择“Eldora”,它应该解析的网站是http://www.coloradoski.com/resorts/eldora。但是如果他们选择“Copper”应该从http://www.coloradoski.com/resorts/copper解析。问题是,只有地址发生了变化,而不是实际的标签。因此,我可以将所有内容复制到 21 个不同的类中并更改地址,但似乎应该有一种方法可以根据用户选择而不是实际标签来更改地址。这是我的代码:

class AddStringTask extends AsyncTask<Void, String, Void> {  
    ProgressDialog progressDialog;
    @Override
    protected void onPreExecute()
    {
        progressDialog= ProgressDialog.show(MainActivity.this, "Loading Data","Getting from http://eldora.com/", true);

        //do initialization of required objects objects here                
    };      
    @Override
    protected Void doInBackground(Void... unused) {
        org.jsoup.nodes.Document doc = null;
        try {
            doc = Jsoup.connect("http://www.coloradoski.com/resorts/eldora").get();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        docTitle = doc.select("div#column-narrow.grid_310.alpha h1").first().text();
        AnnualSnowfallString = doc.select("dl#mountain-stats dt + dd").first().text();

        AreaString = doc.select("dl#mountain-stats dt + dd + dt + dd ").first().text();
        BaseElevationString = doc.select("dl#mountain-stats dt + dd +dt + dd + dt + dd").first().text();
        SummitElevationString = doc.select("dl#mountain-stats dt + dd + dt + dd + dt + dd + dt + dd").first().text();
        HoursofOperationString = doc.select("dl#mountain-stats dt + dd + dt + dd + dt + dd + dt + dd + dt + dd").first().text();
        SeasonDatesString = doc.select("dl#mountain-stats dt + dd + dt + dd + dt + dd + dt + dd + dt + dd + dt + dd").first().text();
        NotesString = doc.select("dl#mountain-stats dt + dd + dt + dd + dt + dd + dt + dd + dt + dd + dt + dd + dt + dd").first().text();
        return null;        
    }

dl#mountain-stats dt + dd + dt + dd不会因站点而异,只是地址。关于如何仅根据用户选择进行更改的任何想法?

4

1 回答 1

0

您可以将参数发送到您的AsyncTask. 改变你的:

class AddStringTask extends AsyncTask<Void, String, Void> { 

class AddStringTask extends AsyncTask<String, String, Void> { 

现在你可以像这样向你AsyncTaskdoInBackground()函数发送参数:

new AddStringTask().execute(STRING_THAT_USER_SELECTED)

在你的doInBackground()函数中,你可以得到传递的字符串

String passedString = unused[0]

在您的progressDialog变量下,定义另一个变量,例如String url

class AddStringTask extends AsyncTask<String, String, Void> {  
ProgressDialog progressDialog;
String url ="http://www.coloradoski.com/resorts/";

在将传递的字符串传递给异步任务后,将传递的字符串附加到url并调用Jsoup's connect()函数。

 doc = Jsoup.connect(url+passedString).get();

希望这可以帮助

于 2013-03-24T22:29:55.157 回答