Søren Lorentzen
Søren Lorentzen

Reputation: 866

AsyncTask is cancelled at constructor

I have an asynctask that - when executed - is cancelled right away.

My class looks like this:

public class JSONParser extends AsyncTask<String, Void, JSONArray> {
    private ListFragment fragment;
    @Override
    protected JSONArray doInBackground(String... strings) {
        JSONArray ja = null;
        String string = "";
        try {
            URL url = new URL(strings[0]);
            BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
            string = br.readLine();

            ja = new JSONArray(string);
        } catch (Exception e ) {
            Log.w("Special", e.toString());
        }
        return ja;
    }

    public JSONParser(ListFragment fragment) {
        this.fragment = fragment;
    }

    @Override
    protected void onPostExecute(JSONArray jsonArray) {
        try {
        ArrayList<HashMap<String ,String>> datalist = new ArrayList<HashMap<String, String>>();

        int i = 0;
        while (i < jsonArray.length()) {
            HashMap<String, String> map = new HashMap<String, String>();
            JSONObject tool = jsonArray.getJSONObject(i);

            map.put("id", tool.getInt("Id") + "");
            map.put("name", tool.getString("Name"));
            datalist.add(map);
            i++;
        }
        fragment.setListAdapter(new SimpleAdapter(fragment.getActivity(), datalist, R.layout.tools_list, new String[] {"name"}, new int[] {R.id.text}));
        } catch (Exception e) {
            e.getMessage();
        }
    }
}

and from my fragment I'm calling it like this

AsyncTask task = new JSONParser(this).execute("http://10.0.2.2:1288/webservice/gettools.aspx");

Using the debugger I can see that as soon as the constructor is called, it skips to onCancelled() and returns. The URL is valid and working, I get no messages in the Log, and the JSON is valid.

Update: Also I have the required permission and OnCancelled() is called before it enters doInBackground(). doInBackground() is never called.

Any ideas?

I'm using IntelliJ and an AVD with Android 4.0.3.

Upvotes: 1

Views: 284

Answers (2)

StErMi
StErMi

Reputation: 5469

Do you have set Internet permissions in your AndroidManifest? Are you sure that in the doInBackground there is no exception fired?

Maybe it could be a better idea to also put the while (i < jsonArray.length()) part in the doInBackground :) (for performance)

Code to read String:

BufferedReader reader = new BufferedReader(yourInputStreamReader,8);

        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }

Upvotes: 1

CAA
CAA

Reputation: 970

oehm... you are creating your task with an activity object (this) (???)

AsyncTask task = new JSONParser(this).execute("http://10.0.2.2:1288/webservic /gettools.aspx");

but your task expects a View

public JSONParser(ListFragment fragment) {

im surprised that this doesnt throw an exception

Upvotes: 0

Related Questions