簡體   English   中英

Android應用程序開發和Web服務器交互

[英]Android App Development and Web Server Interactions

我只是在學習Android開發,因此,如果這本質上有點偏離,請原諒。 從某種意義上講,我想做一個與我的網站與數據庫交互的應用程序,從某種意義上說,這兩件事將相互促進。 因此。 我試圖找出什么是與服務器交互的最佳方法。 我不希望這樣的應用程序在類似瀏覽器的環境中使用,我希望開發一個完整的應用程序,該應用程序獨立於站點而僅共享數據庫和類似功能。 那么我最好的方法是什么?

正在構建應用程序,以便可以將其發布/獲取基本上通過JSON / XML交互的服務器上的php文件,這是我最好和/或最安全的選擇,還是有一種更好的方法將應用程序連接到服務器,不需要我打開數據庫到發出請求的任何IP。

只是在這里尋找意見和建議。 我認為將要看到這一點的每個人都熟悉Android開發和最佳實踐,在我可以並且已經瀏覽過博客和其他所有東西的地方,但對於哪種最好的看法似乎是50/50。

我確定有很多Android的庫可以幫助您進行HTTP Get和Post操作,但是,如果您真的想了解發生的事情,則只需要了解幾個類即可自己創建必要的類。

首先,了解HttpClient,HTTPGet,HTTPPost和HTTPResponse。 Android的某些更高版本也具有其他一些不錯的類,但是這四個幾乎是您入門所需的全部。

你需要做這樣的事情:

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://www.myurl.com/api_name");
HttpResponse response = client.execute(request);

如果您對此進行調試(當然使用真實的URL),則會注意到您的應用在client.execute()期間凍結。 這是請求實際觸發並且應用程序正在等待響應的地方。 實際獲得響應后,從中獲取數據並不是很困難。

了解這一點后,您將需要了解AsyncTask,它對於執行后台任務無窮無盡。 您可以在以下位置找到文檔: http : //developer.android.com/reference/android/os/AsyncTask.html頂部有一個很好的示例,說明了如何使用此文檔。

結合使用這兩個概念,您可以執行異步HTTP請求。 基本上,將實際的HTTP執行代碼放入AsyncTask的doInBackground中。 在doInBackground的最后,返回您的響應,然后對AsyncTask的onPostExecute中的數據執行所需的操作。

我們發現,提供適當的RESTful Web API,可以使用您選擇的任何語言(無論是PHP,RoR還是其他語言)在后端數據庫上提供數據庫,可為多種用途(您自己的網站,移動應用等)提供有用的界面)。

然后,這就是您的Android應用程序與RESTful API(僅是HTTP請求)進行交互的問題。 可以將它們封裝在幫助器類中,以使其變得簡單明了。

根據我的經驗,使用Android執行RESTFul的最佳框架是: Spring Android

從客戶端的角度來看,它提供了訪問安全RESTFul服務所需的所有工具。 由於它是Spring,因此它為大多數樣板HTTP代碼提供了很好的抽象。 例如,它提供了一種干凈的方法來執行返回json的GET,然后將其序列化為POJO。

舉個例子:

RestTemplate restTemplate = new RestTemplate();

// Add Jackson JSON Message Converter to Template
restTemplate.setMessageConverters(
    new ArrayList<HttpMessageConverter<?>>() {
        {              
            add(new MappingJacksonHttpMessageConverter());
        }
    }
);  

// Simple Conversion - pojo is now populated
MyPojo pojo = restTemplate.getForObject(url, MyPojo.class);

您在問題中提到的方法是可行的:服務器上的PHP和用於請求/響應的JSON。 但是,使其變得完美可能會很棘手。

我發現為Android端的每個調用設置較小的請求/響應類很有幫助,例如SaveNoteToServerRequest,SaveNoteToServerResponse類,它們都是純Java對象,具有請求/響應所需的任何字段。 然后,您可以使用GSON之類的庫將請求對象轉換為JSON,並將http響應從JSON轉換為響應對象。

在PHP方面,您可以為響應對象創建一個小類,然后在末尾創建json_encode。

這樣,您就不會直接操縱JSON對象,而是大多數時候僅使用自己的純java對象或php類。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM