0

Androidバージョン> 3をターゲットとするAndroidアプリケーションのasynctaskを介してxmlダウンロードを実行するための次のコードがあります。ネットワーク/インターネット接続が良好であれば、コードはかなりうまく機能します。ただし、インターネット接続が良好でない場合、アプリケーションは強制終了します。さまざまな種類のエラーキャッチを試してみましたが、低速のインターネット接続で強制終了を解決できません。

誰でも私が試すことができる提案があります

private class DownloadWebPageXML extends AsyncTask<String, Void, InputStream> {
    @Override
    protected InputStream doInBackground(String... urls) {
        Log.d("mylogitem", "AsyncTask started!");
        InputStream content = null;
        String myurl = urls[0];

        AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
        HttpGet httpGet = new HttpGet(myurl);
        try {
             HttpResponse execute = client.execute(httpGet);
             content = execute.getEntity().getContent();
        } catch (Exception e) {
            xmldownloaderror = e.getMessage();
            Log.d("mylogitem", e.getMessage());
        } finally {
            Log.d("mylogitem", "Closing AndroidHttpClient");
            client.close();
        }
        return content;
    }

    @Override
    protected void onPostExecute(InputStream result) {
        //do xml reader on inputstream
    }   
}
4

3 に答える 3

1

うーん...接続時間を設定することをお勧めします。

HttpClient クライアント = 新しい DefaultHttpClient();

HttpResponse 応答; BufferedReader bufferedReader = null;

HttpParams パラメータ = client.getParams();

HttpConnectionParams.setConnectionTimeout(params, 20000);

HttpConnectionParams.setSoTimeout(params, 20000);

于 2013-08-28T10:01:10.363 に答える
0

根本的な原因を見つけました。dobackground にはありません。私の場合、お粗末な接続は、xml データ型ではなく読み込みエラーを返すことがあります。これは、postexecute で xmlparser に入力ストリームとして渡されます。

私は、xmlparser に多くのエラー キャッチャーを入れていませんでした。xmlparser は xml ドキュメントを予期していますが、xml 以外のコンテンツを受け取ったため、エラー キャッチャーでカバーしなかった null をスローしました。

提案していただきありがとうございます。コードにも配置しました。

于 2013-08-28T13:52:31.930 に答える