0

我使用 AsnycTask 连接 URL 并解析返回的 xml:

class Connecting extends AsyncTask<String, String, String> {
    private String URLPath = "";
    private HttpURLConnection Connection;
    private InputStream InputStream;
    private boolean Return1 = false;
    private int Return2 = -1;

    public Connecting (String fn, String u) {
        FileName = fn;
    URLPath = u;
        Connection = null;
    InputStream = null;

    Return1 = false;
    Return2 = -1;

    execute();
    }

    public boolean getReturn1() {
    return Return1;
    }

    public int getReturn2() {
    return Return2;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... aurl) {
        try {
            URL url = new URL(URLPath);
            Connection = (HttpURLConnection)url.openConnection();
            Connection.setConnectTimeout(10000);
            Connection.setReadTimeout(10000);
            Connection.setDoInput(true);
            Connection.setUseCaches(false);
            Connection.connect();
            InputStream = Connection.getInputStream();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String unused) {
        super.onPostExecute(unused);

        try {
            InputStreamReader fsr = new InputStreamReader(InputStream);

            BufferedReader br = new BufferedReader(fsr);
            String line = "";
            while((line = br.readLine()) != null) {
                //parse Reture1 and Return2
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        Connection = null;
    }
}

我使用下面的代码来调用它:

Connecting con = new Connecting(Name, URL);
System.out.println("Return1 " + con.getReturn1());
System.out.println("Return2 " + con.getReturn2());

它会得到falseand -1,它是 init 值。
并在打印消息后连接 URL。
我想从xml中获取连接成功和解析的值。
我该怎么做?

4

2 回答 2

1

与主AsyncTask线程异步运行(顾名思义)。如果您想在任务完成后发生某些事情,则必须将该代码放入onPostExecute()方法中。所以你可以把它放在System.out那里。

于 2013-06-07T09:22:22.573 回答
1

AsyncTask 是一个有助于在后台运行的类。如果您想使用例如 HTTP 连接访问远程服务器,您可以使用它。在 doBackground 方法中,您必须执行“繁重”任务,该任务需要时间并且可能会阻塞 UI。在 doBackground 结束时,您必须返回作为任务结果的值。然后在 onPostExecute 中,您使用此结果更新例如 UI。在您的情况下,在我看来您没有正确使用 AsyncTask。首先,您在 doBackground 中返回 null 并且不要按应有的方式设置 return1 和 return2。在 onPostExecute 中,您应该在 doBackground 中读取响应。还有另一种方法可以覆盖称为 onPreExecute 的方法,该方法在 doBackground 方法之前调用。

在我的博客中,我有一个示例如何在这种情况下使用 AsyncBackground,它可以帮助您。如果你喜欢看看这里

于 2013-06-07T09:34:16.360 回答