应用程序关闭后,无法从AsyncTask中的URL获取InputStream

时间:2014-11-17 06:29:49

标签: java android android-asynctask

我有这个简单的AyncTask,我在其中从URL获取字节:

class MyAsyncTask extends AsyncTask<String, Void, ArrayList<MyObject>> {

private ProgressDialog dialog;
private FragmentActivity context;

public MyAsyncTask(FragmentActivity activity) {
    context = activity;
    dialog = new ProgressDialog(context);
}

protected void onPreExecute() {
    this.dialog.setMessage("...");
    this.dialog.show();
}

@Override
protected ArrayList<MyObject> doInBackground(String... params) {
    URL url = new URL(params[0]);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    ArrayList<MyObject> objects = null;

    try {
        InputStream in = connection.getInputStream();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(in));
        if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
            return null;
        }
        String line;
        objects = new ArrayList<MyObject>();
        MyObject mo = new MyObject();

        while ((line = reader.readLine()) != null) {
            // Process data
        }

        reader.close();
        in.close();

    } catch (Exception e) {
        return null;
    } finally {
        if (connection != null)
            connection.disconnect();
    }

    return objects;

}

@Override
protected void onPostExecute(ArrayList<MyObject> data) {
    if (dialog.isShowing()) {
        dialog.dismiss();
    }

    if (data == null) {
        Toast.makeText(context, "fail", Toast.LENGTH_SHORT).show();
    }

    else {

    }

}
}

此代码的问题在于它仅在应用程序打开时第一次起作用。关闭我的应用程序后,这不再起作用了。问题出现在这一行:

InputStream in = connection.getInputStream();

关闭我的应用程序后,我无法让getInputStream();再次工作。在我的AsyncTask再次启动后,它只显示进度条并保持不变。使用LogCat,我发现它在该行停止,就像流仍然打开一样。

可能有什么问题?我没有收到任何例外,只有当我关闭申请时才会收到此警告:

IInputConnectionWrapper showStatusIcon on inactive InputConnection

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你可以尝试在catch块中调用disconnect吗?因为如果发生某些异常,则Url连接仍然不会断开连接。

catch (Exception e) {
    if (connection != null)
        connection.disconnect();
    return null;
} finally {
    if (connection != null)
        connection.disconnect();
}

答案 1 :(得分:0)

输入连接尚未关闭时会出现此问题。使用以下方法检查是否关闭了输入连接:

connection.close()