検索

ホームページ  >  に質問  >  本文

android - AsyncTask进行http请求,请求到XML数据后在onPostExecute解析,为何报在主线程中执行网络请求错误。

然而将解析操作写在doInBackground方法中不会报错。

怪我咯怪我咯2772日前512

全員に返信(3)返信します

  • PHP中文网

    PHP中文网2017-04-17 17:38:35

    これで終わりです。元の投稿者の結果 (InputStream) は、リモート リソースを指す InputStream です。この時点で、InputStream からデータを読み取ることは、リモート リソースを読み取ることと同じであるため、エラーが報告されます。根本的な理由は、Android の「ネットワーク リクエストはメイン スレッドで実行できない」という制限が、接続 ((HttpURLConnection)url.openConnection()) に限定されるものではなく、データ プロセス全体に及ぶためです。

    したがって、推奨されるアプローチは、InputStream 解析全体を doInBackground に配置し、ビジネス ロジックに準拠するエンティティ クラスを doInBackground に返すことです。

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 17:38:35

    解析は時間のかかる操作なので、onPostExecute がメインスレッド、doInBackground がサブスレッドに配置する必要があります。

    メインスレッドで時間のかかる操作を実行したため、エラーが報告されるのは通常のことです。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 17:38:35

    InputStream を取得したデータ文字列に置き換える必要があります

    その後、onPostExecute() で

    を解析します

    返事
    0
  • キャンセル返事