簡體   English   中英

應用程序關閉后,無法從AsyncTask中的URL獲取InputStream

[英]Cannot get InputStream from URL inside AsyncTask after application closes

我有一個簡單的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

謝謝您的幫助。

您能不能嘗試在catch塊中調用斷開連接? 因為如果發生某些異常,Url連接將保持不斷開狀態。

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

輸入連接尚未關閉時,會發生此問題。 使用以下命令檢查是否關閉了輸入連接:

connection.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM