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());

それは、初期値であるfalseとを取得します。 そして、印刷メッセージの後に URL を接続します。 xmlから接続成功と解析を行った値を取得したいです。 どうすればいいですか? -1


4

2 に答える 2

1

AsyncTask は、バックグラウンドでの実行に役立つクラスです。たとえばHTTP接続を使用してリモートサーバーにアクセスする場合に使用できます。doBackground メソッドでは、時間がかかり、UI をブロックする可能性のある「重い」タスクを実行する必要があります。doBackground の最後で終了したら、タスクの結果である値を返す必要があります。次に onPostExecute で、この結果を使用して UI などを更新します。あなたの場合、AsyncTask を正しく使用していないようです。まず、doBackground で null を返し、return1 と return2 を必要に応じて設定しないでください。そして、onPostExecute では応答を読み取りますが、yuo は doBackground でそれを行う必要があります。doBackground メソッドの前に呼び出される onPreExecute というオーバーライド可能な別のメソッドがあります。

私のブログでは、この場合に AsyncBackground を使用する方法の例があり、それが役立つ可能性があります。よろしければこちらをご覧ください

于 2013-06-07T09:34:16.360 に答える