0

我正在尝试使用 jsoup 查询 url,但出现以下错误:方法 findViewById(int) is undefined for the type

有什么建议么?(我真的不确定此时我做错了什么或如何纠正问题)

使用示例:

如何将 AsyncTask 用于 Jsoup 解析器?

资源:

package com.example.httpgetandroidexample;

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.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class HttpGetAndroidExample<AsyncronoustaskAndroidExample> extends
        Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }
}

public class HttpGetAndroidExample<OnCompleteListener> extends
        AsyncTask<Void, Void, Void> {
    // HERE DECLARE THE VARIABLES YOU USE FOR PARSING
    private Element overview = null;
    private Element featureList = null;
    private Elements features = null;
    private Element paragraph = null;
    String url = "http://www.sheriff.org/apps/arrest/results.cfm?lname=&fname=";

    @Override
    protected Void doInBackground(Void... arg0) {
        Document doc = null;
        try {
            doc = Jsoup.connect(url).get();
            overview = doc.select("div#object-overview").last();
            featureList = doc.select("div.callout-box").last();

            features = featureList.select("li");
            paragraph = overview.select("p").last();
            System.out.println(paragraph.text());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // Get the paragraph element
        // article.setText(paragraph.text()); I comment this out because you
        // cannot update ui from non-ui thread, since doInBackground is running
        // on background thread.

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        TextView article = (TextView) findViewById(R.id.releaseInfo);
        final TextView featuresText = (TextView) findViewById(R.id.features);
        for (Element e : features) {
            // setText()
        }

    }

}
4

3 回答 3

0

假设你AsyncTask在一个Activity, 在你的外部类中AsyncTask声明变量:

TextView article;
TextView featuresText;

然后在里面onCreate()

article = (TextView)findViewById(R.id.releaseInfo);
featuresText = (TextView)findViewById(R.id.features);

然后在你里面onPostExecute(),你可以打电话setText

article.setText("blah"); //..

此外,您可以使用runOnUiThreaddoInBackground(). 希望对其他人有帮助请发表评论。

于 2013-07-18T20:54:48.003 回答
0

这是因为没有为 AsyncTask 定义 findViewById() 方法。如果您在 Activity 中使用它,您可以尝试使用 YourActivity.this.findViewById()。

于 2013-07-18T20:58:10.643 回答
0

显然你的类不是Activity的内部类,因此你无权访问它的(Activity)方法,比如findViewById。你可以做两件事:

  1. 将 HttpGetAndroidExample 作为私有类放入您的活动中
  2. 将活动作为参数传递给 HttpGetAndroidExample 并在需要时调用它的方法。
于 2013-07-18T21:01:16.383 回答