Sean's Note: new Socket 時發生 Exception

2013年3月28日 星期四

new Socket 時發生 Exception

今天想寫一個 Android 的 Client 端將資料傳輸到 PC 的 Server 端。

我在 onCreate() 時去 new Socket(strIP, 27015) 卻發生 NullPointerException

strIP 明明就不是 null pointer,傳進去後卻莫名變成 null 了。

在網路上也找不到相關的資料,索性試著將 new Socket 一行移至 OnClick(),

這時跑出了另一個 NetworkOnMainThreadException,於是讓我找到了相關的文章。

根據 Why Ice Cream Sandwich Crashes Your App 這篇文章的說明,Android 3.0 以上

不允許在 UI thread 裡做以下的運算:
  • Opening a Socket connection (i.e. new Socket()).
  • HTTP requests (i.e. HTTPClient and HTTPUrlConnection).
  • Attempting to connect to a remote MySQL database.
  • Downloading a file (i.e. Downloader.downloadFile()).
解決方法: AsyncTask, Thread, Service(Android)

沒有留言:

張貼留言