nabroyan
nabroyan

Reputation: 3275

AsyncTask stops application

I'm using AsyncTask in my application, but when it starts, it's like that it never ends. When I'm debugging after doInBackground application freezes and stuck in ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker).

Here's the structure of my code

class FetchSymbolInfo extends AsyncTask<String, Void, Document> {

        private Exception exception = null;

        @Override
        protected Document doInBackground(String... params) 
        {
            try 
            {
                Document doc = null;
                //doc = Jsoup.connect(params[0]).get();//application freezes even if I remove this line
                return doc;
            } 
            catch (Exception e) 
            {
                this.exception = e;
                return null;
            }
        }

        @Override
        protected void onPostExecute(Document result) 
        {
            if(exception != null)
        {
            AlertDialog alertDialog;
            alertDialog = new AlertDialog.Builder(null).create();//////////
            alertDialog.setTitle("Error");
            alertDialog.setMessage("Could not fetch from internetd\nPlease check your inernet connection and symbol name.");
            alertDialog.show();
            return;
        }

        Elements valueElement = result.select("div#qwidget_lastsale");
        String valueString = valueElement.toString();
        //getting number from string
        }

        @Override
          protected void onPreExecute() {
          }

        @Override
        protected void onCancelled() {
            super.onCancelled();
        }

        @Override
        protected void onCancelled(Document result) {
            super.onCancelled(result);
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }

And I'm trying to execute it like this

String url = "url";  //writing an url
FetchSymbolInfo fetch = new FetchSymbolInfo();
fetch.execute(url);

Any ideas? Thank you in advance!

Upvotes: 3

Views: 454

Answers (2)

whitfin
whitfin

Reputation: 4629

You're trying to create an AlertDialog by providing a null Context. What you need to do is pass a valid Context from the Activity calling the AsyncTask by passing the Context to the constructor of the task and then using that with the Dialog:

class FetchSymbolInfo extends AsyncTask<String, Void, Document> {

private Context parent;

// ...

public FetchSymbolInfo(Context c){
    parent = c;
}

// ...

if(exception != null){
    AlertDialog alertDialog;
    alertDialog = new AlertDialog.Builder(parent).create();
    alertDialog.setTitle("Error");
    alertDialog.setMessage("Could not fetch from internetd\nPlease check your inernet connection and symbol name.");
    alertDialog.show();
    return;
}

Addition: Although not directly related to the question, I think it's important to mention here than if you set a breakpoint in a new thread as the OP did, you won't hit it - you're better off using Log to keep track of entering/exiting methods/code blocks.

Upvotes: 1

Hadriel
Hadriel

Reputation: 159

It seams that you should be getting a NPE in.

    Elements valueElement = result.select("div#qwidget_lastsale");

Upvotes: 0

Related Questions