简体   繁体   中英

The method findViewById(int) is undefined for the type using AsyncTask for Jsoup Parser

I'm attempting to query a url using jsoup and I'm getting the following error: The method findViewById(int) is undefined for the type

Any suggestions? (I'm really not sure what I'm doing wrong at this point or how the issue can be corrected)

Using example:

How to use AsyncTask for Jsoup Parser?

SOURCE:

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()
        }

    }

}

Assuming you AsyncTask is inside an Activity , in your outer class of AsyncTask declare the variables:

TextView article;
TextView featuresText;

Then inside onCreate() :

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

Then in you onPostExecute() , you can just call setText

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

Also, you may use runOnUiThread for making changes from within the doInBackground() . Hope it helps else please comment.

This is because findViewById() method is not defined for AsyncTask. If you're using this within an Activity, you can try using YourActivity.this.findViewById().

Obviously your class is not inner class of the Activity, and therefore you don't have access to its (Activity) methods, such as findViewById. You can do two things:

  1. Put HttpGetAndroidExample inside your activity as private class
  2. Pass activity as parameter to HttpGetAndroidExample and call it's methods when needed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM