chathu
chathu

Reputation: 41

Android AsyncTask getting an exception null

In the AsyncTask android. When calling a method in another class gets an exception which equals to null in the doInBackGround() task.

Even the hard coded inside the rest.request(url, method, json) doesn't work

       protected JSONArray doInBackground(Void... arg0) {

            try {
                return rest.request(url, method, json);  // <-- returns json array
            } catch (Exception e) {
                this.e = e; 
            }
            return null; // <--- returning this null

        }

Other things are like this,

private class doRequest extends AsyncTask<Void, JSONArray, JSONArray>
protected void onPostExecute(JSONArray data)


/*rest client class*/
public class AndrestClient {

// The client to use for requests
DefaultHttpClient client = new DefaultHttpClient();
public JSONArray request(String url, String method, String json) throws RESTException {
        if (method.matches("GET")) {
            return get(url);
        } else if (method.matches("POST")) {
            return post(url, json);
        } else if (method.matches("PUT")) {
            //return put(url, data);
        } else if (method.matches("DELETE")) {
            //return delete(url);
        }
        throw new RESTException("Error! Incorrect method provided: " + method);
    }

    public JSONArray get(String url) throws RESTException {

        String jsonjr = "['Chanuthi','Damsith','Dunili','Isath','Minuka','Uvin','Vidath']";

        JSONArray jsonAraay = null;
        try {
            jsonAraay = new JSONArray(jsonjr);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return jsonAraay;
}
}

The exception I got is e=null. All the other things work properly. When I am hard coding the result inside in the doInBackGround it works properly. Also the rest client get method returns the exact thing.

Upvotes: 2

Views: 462

Answers (1)

MiiinimalLogic
MiiinimalLogic

Reputation: 818

It appears you're using AsyncTask improperly. Firstly, you must subclass/nest your AsyncTask as per the Android documentation:

http://developer.android.com/reference/android/os/AsyncTask.html

In addition, you should follow the fundamental rules for calling methods of an outter class from a nested class.

There are some alternatives, like:

  • Create the AndrestClient object in onPreExecute() of the AsyncTask
  • Pass the AndrestClient object to the doInBackground as a parameter, then call its methods by doing something like this in the outter class:

    doRequest.execute(rest);

Upvotes: 1

Related Questions