Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Android

Challenge 3 of 3. I Checked outher answers that I have found on here but I've not been able to pass this yet?

This is the question : Now move the 'try' and two 'catch' blocks from the 'onCreate()' method to the 'doInBackground()' method. Leave the return statement as is, and then execute your custom async task from inside the 'onCreate()' method after 'setContentView()'.

My answer is:

package com.example;

import android.os.Bundle;
import android.view.View;
import java.io.IOException;
import java.net.MalformedURLException;
import android.util.Log;
import android.os.AsyncTask;

public class MainListActivity extends ListActivity {
  private class CustomAsyncTask extends AsyncTask<Object, Void, String>{
   @Override
protected String doInBackground(Object...params){
  try {
            URL treehouseUrl = new URL(URL);
            HttpURLConnection connection = (HttpURLConnection) treehouseUrl.openConnection();
            connection.connect();
            int responseCode = connection.getResponseCode();
        }
        catch (MalformedURLException e) {
            Log.e(TAG, "MalformedURLException caught!", e);
        }
        catch (IOException e) {
            Log.e(TAG, "IOException caught!", e);
        }
          return "";  

    }


  }
  }
    public static final String URL = "http://www.teamtreehouse.com";
    public static final String TAG = MainListActivity.class.getSimpleName();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_list);
          customAsyncTask.execute();  

    }

}

I am sure that I am missing something small here any help would be greatly appreciated. Thanks in advance guys.

2 Answers

You're really close! Just two things you need to change:

  1. Before you do customAsyncTask.execute(); in your onCreate method, you'll want to declare a CustomAsyncTask object with the variable name customAsyncTask and then initialize it using the new keyword and the CustomAsyncTask() constructor. Then, you will be all set to call execute() on customAsyncTask in the next line.

  2. You have an extra closing curly bracket after your doInBackground method.

Thank for your quick response Kristen Law. I made the adjustments but I still seem to be stuck what am I doing wrong here? Thanks in advance.

package com.example;

import android.os.Bundle;
import android.view.View;
import java.io.IOException;
import java.net.MalformedURLException;
import android.util.Log;
import android.os.AsyncTask;

public class MainListActivity extends ListActivity {
  private class CustomAsyncTask extends AsyncTask<Object, Void,String>{
  @Override
    protected String doInBackground(Object... params){
      //TODO auto-generated.
      return null;

        try {
            URL treehouseUrl = new URL(URL);
            HttpURLConnection connection = (HttpURLConnection) treehouseUrl.openConnection();
            connection.connect();
            int responseCode = connection.getResponseCode();
        }
        catch (MalformedURLException e) {
            Log.e(TAG, "MalformedURLException caught!", e);
        }
        catch (IOException e) {
            Log.e(TAG, "IOException caught!", e);
        }
    }
  }

    public static final String URL = "http://www.teamtreehouse.com";
    public static final String TAG = MainListActivity.class.getSimpleName();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_list);
      CustomAsyncTask customAsynTask = new CustomAsyncTask();
      customAsyncTask.execute();

    }
}

Looks like you changed up your doInBackground method a little bit. It was correct in your first post, so you can go back and review what it should look like. Also, you have a small typo when you declare the CustomAsyncTask in your onCreate method: you declared the variable as customAsynTask instead of customAsyncTask.