Reputation: 866
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
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
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