1

我有一个异步任务 - 在执行时 - 立即被取消。

我的课看起来像这样:

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 有效。

更新:我还拥有所需的权限,并且在进入 doInBackground() 之前调用了 OnCancelled()。doInBackground() 永远不会被调用。

有任何想法吗?

我正在使用 IntelliJ 和带有 Android 4.0.3 的 AVD。

4

2 回答 2

1

您是否在 AndroidManifest 中设置了 Internet 权限?您确定在 doInBackground 中没有触发异常吗?

也许将 while (i < jsonArray.length()) 部分放在 doInBackground 中可能是一个更好的主意 :) (为了性能)

读取字符串的代码:

BufferedReader reader = new BufferedReader(yourInputStreamReader,8);

        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
于 2012-05-31T10:28:46.553 回答
0

oehm ...您正在使用活动对象(this)(???)创建任务

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

但你的任务需要一个视图

public JSONParser(ListFragment fragment) {

我很惊讶这不会引发异常

于 2012-05-31T10:34:07.370 回答