Qtをメインに、プログラムやITに関する情報を発信

Qtの戯言

Android

AndroidのSocket通信でエラー(NetworkOnMainThreadException)

更新日:

個人用途でGPSロガー的なアプリを作っているのですが、旧端末(Androidバージョン:5.0.2)で動いていたのが、新端末(Androidバージョン:8.0.0)で落ちるようになったので、備忘録メモ。

 

原因

最初はGPS関係が怪しいんじゃないかと疑っていましたが、ADBに繋いでログを見ると、「NetworkOnMainThreadException」とのこと。

車の運転中にログを取ることだけを目的にしていたので、
アプリ起動 → MainActiviy内でLocationManager登録 → onLocationChanged内でSocket生成、OutputStreamに書き込み、切断
とやっていたのがダメだったようです。

運転中にスマホいじるわけもなく、アプリ起動して放置するだけだったので、とにかくシンプルにしたかったのですが・・・。

 

対策

Threadを継承したソケット通信用スレッドクラスを作成し、run()の中でSocket生成、OutputStreamに書き込み、切断を行うようにすることで解決しました。

-Android
-,

Copyright© Qtの戯言 , 2020 All Rights Reserved Powered by STINGER.