У меня есть asynctask, которая - когда выполняется - отменяется сразу.AsyncTask отменен в конструкторе
Мой класс выглядит следующим образом:
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();
}
}
}
и из моего фрагмента я звоню его как этот
AsyncTask task = new JSONParser(this).execute("http://10.0.2.2:1288/webservice/gettools.aspx");
Использование отладчика я могу видеть, что как только вызывается конструктор, он переходит к onCancelled() и возвращается. URL-адрес действителен и работает, я не получаю сообщений в журнале, и JSON действителен.
Обновление: также у меня есть требуемое разрешение, и вызывается OnCancelled(), прежде чем он войдет в doInBackground(). doInBackground() никогда не вызывается.
Любые идеи?
Я использую IntelliJ и AVD с Android 4.0.3.
может попробовать? BufferedReader r = новый BufferedReader (новый InputStreamReader (inputStream)); StringBuilder total = new StringBuilder(); Строка; while ((line = r.readLine())! = Null) { total.append (строка); } –
вы можете установить точку отладки в строке = br.readLine(); при проверке потока reahig там или нет? –
У меня есть. Я уточню вопрос. –