AS android前端+eclipse後端+阿里雲服務器 數據交互

背景和目的

  • 這篇博客基於近期的一次android項目(前端+後端服務器)——即要實現android端與服務器端的數據交互。作爲android領域的一名菜鳥,我在項目開始遇到了重重困難。
  • 接下來,我將我“入坑-填坑-挖坑-入坑-脫坑”的經歷向大家一一道來,也希望android後來者能夠及時甄別錯誤,有一次滿意的項目體驗。

一、說在前面

本篇博客主要吐槽項目過程中遇到的各種問題,這些問題可能具有 片面性。我會在每一個問題後面附上有關博客,並標註出處,希望對大家有用。

1. android 9以後不能明文訪問http

android 9.0 之後不能通過http發起請求,換言之,android 9 之後的所有http請求都會被阻止。該問題有三個解決方案:

1. 服務器採用https:
2. 編譯SDK版本改爲27以下此處大坑
2.1 AS中改SDK編譯版本似乎有兩種方法:

直接改 compileSdkVersion 爲27以下
[ 不建議,因爲構建之後會出現“resource linking failed”的錯誤,而且這些資源既不能改又不能刪 ]

AS下 File > Project Structure > Modules >Properities >Compile SDK version ,然後Apply 重啓AS
在這裏插入圖片描述

3. 在項目資源文件中適配android 9 https:(建議使用這種,親測有效)
step 1: 項目目錄中res文件夾下新建資源文件夾xml,新建File,命名爲network_security_config.xml
內容如下:

<?xml version="1.0" encoding="utf-8"?>
<!--Android 9.0 https請求適配-->
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

step 2:將HTTPS適配資源配置添加到AndroidManifest.xml文件中,如下:
在這裏插入圖片描述

2 通過message機制進行主、子線程之間的數據交換

android Message機制可以理解爲現實生活中的“郵箱”機制:

  • 物質世界:一個郵箱可以接受很多條郵件
  • 程序中對一個線程來講,它也擁有一個Message隊列(或稱爲message pool)

以網絡請求爲例,網絡請求具有時延,如果我們要使用通過的數據進行UI操作,就可以使用message機制在主線程和網絡請求線程之間進行數據交換:
Message機制流程圖
以網絡請求爲例的Message機制代碼鏈接:android Message 機制 的代碼示例

3 android http請求阻塞在httpCilent.newCall(request).execute()

這個問題具體表現爲程序執行到
Response response = httpClinet.newCall(request).execute()
這一步就停止了,即 http請求未得到response對象

  • 解決方法:如果是真機調試(因爲作者使用的是真機調試),檢查網絡是否可用。

博客爲作者原創,轉載請註明出處 AS android前端+eclipse後端+阿里雲服務器 數據交互,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章