在android應用開發過程中,經常需要透過網路請求獲取服務端的資料,透過網路請求提交客戶端的資料到伺服器端等場景;以下整理在android網路請求開發過程中新手開發者時常遇到的問題~
android。os。NetworkOnMainThreadException
出現這種問題的原因是由於在主執行緒中進行了網路請求操作,android下不建議在主執行緒中進行網路請求操作,因為這可能會造成UI介面的卡頓,引起應用效能問題等
那麼怎麼確定當前執行緒是不是
主執行緒
?
可以透過程式碼
Thread.currentThread().getName()
來打印出當前上下文的執行緒名稱,來觀察當前環境,列印結果中顯示是
main
執行緒的話,那就說明當前是在主執行緒上下文中執行操作了
解決方案
:應該在非主執行緒環境下進行網路請求的操作,也就是在別的執行緒中來開發網路請求的程式碼,來規避問題,使用new Thread新建執行緒呼叫測試,觀察結果可以發起網路請求了
在不同的網路請求庫中有相應的執行緒呼叫解決方案說明,請詳細查詢自己使用的網路請求庫開發文件來優雅的解決這樣的問題
No address associated with hostname
出現這種問題的原因是由於該應用沒有
訪問網路
的許可權,不能使用網路套接字
解決方案
:修改
AndroidManifest.xml
清單配置,增加如下的網路訪問許可權配置宣告
儲存配置,再重新啟動app除錯就會發現可以正常使用網路請求了
not permitted by network security policy
由於android網路訪問明文傳輸被限制,需要配置策略允許訪問
解決方案
:修改
AndroidManifest.xml
清單配置,修改application增加如下屬性配置
android:networkSecurityConfig=“@xml/network_security_config”
同時新增
res/xml/network_security_config.xml
資原始檔
<?xml version=“1。0” encoding=“utf-8”?>
配置好後重新啟動應用除錯,發起網路請求操作發現沒有問題了