當前位置:首頁 » 安卓系統 » android與rest

android與rest

發布時間: 2022-06-08 04:43:14

❶ 怎樣為網站的Android客戶端開發RESTful的API

簡單來說就是將網站的功能移植到API方式,主要就是數據格式的變化 html to json or xml
看看微博,豆瓣的 API 文檔,看看他們和自身網站的對應關系。
PS: 抓包分析下知乎的客戶端也是可以的 ;)

❷ resttemplate 在安卓端是怎麼實現的

Spring 是一種用於運行 java 企業應用程序的平台,它提供幾個優點,比如說提高了生產率和運行時性能。Spring Android 是 Spring 框架的一個擴展,它簡化了 Android 應用程序的開發。Spring Android 的主要特性是一個針對 Android 的 REST 客戶端和對訪問安全 API 的 Auth 支持。
本文中,將學習利用 Spring Android REST 客戶端訪問 RESTful web 服務。

❸ 最實用的Android開發資源有哪些

1. Android Annotations
Android Annotations是一個能夠加速Android開發的開源框架,它可以幫助開發者處理一些前後台任務、rest服務、應用類、代碼片段等,讓開發者專注於真正重要的東西。
2. ActionBarSherlok
ActionBarSherlock是一個擴展的Android支持庫,旨在允許開發者通過一個單一的API,在所有的Android版本中都能夠非常方便地使用活動欄設計模式。
3. Spring Android
Java開發者應該比較熟悉,這是一個針對Android開發的Spring框架。使用最多的是RestTemplate功能,此外,AndroidAnnotations已經支持Spring Rest Template,使得編寫REST客戶端更加容易。
4. URLImageViewHelper
如果想在應用程序中通過URL來載入遠程圖像,這是最好的選擇。URLImageViewHelper提供了輔助類,可以很容易地載入遠程圖像,同時還提供了圖像緩存功能。
5. SubtlePatterns
SubtlePatterns提供了一些高質量的紋理圖案資源,圖案都非常適合作為應用背景,並且使用也很簡單。可以點擊這里來看如何在應用中使用這些圖案。
6. Sliding Menu(滑動菜單)
顧名思義,SlidingMenu是一個在Android應用中添加滑動菜單效果的庫,盡管網上還有一些其他類似的庫,但發現從性能和易於集成方面,SlidingMenu是最好的。
7. Android ViewPagerIndicator
一個非常棒的庫,用於在一個多頁面切換視圖中指示當前的頁面。
8. Vogella Android教程
vogella團隊幾乎已經將Android開發中的所有事情做成了教程,對於開發入門非常有幫助。
9. Android-PullToRefresh
針對Android的下拉刷新庫。
10. 谷歌的Android教程
開始Android開發必備的指南、培訓資源。
11. Commonsware Github庫
幾款Android應用開發庫,可以使開發工作更加輕松。

❹ android四大組件的作用

Android 開發的四大組件分別是:活動(activity),用於表現功能;服務(service),後台運行服務,不提供界面呈現;廣播接受者(Broadcast Receive),勇於接收廣播;內容提供者(Content Provider),支持多個應用中存儲和讀取數據,相當於資料庫

  1. 活動

Android中,activity是所有程序的根本,所有程序的流程都運行在activity之中,activity可以算是開發者遇到的最頻繁,也是android當中最基本的模塊之一。在android的程序中,activity一般代表手機屏幕的一屏。如果把手機比作一個瀏覽器,那麼activity就相當於一個網頁。在activity當中可以添加一些Button、Checkbox等控制項,可以看到activity概念和網頁的概念相當類似。

一般一個android應用是由多個activity組成的,這多個activity之間可以進行相互跳轉。例如,按下一個Button按鈕後,可能會跳轉到其他的activity,與網頁跳轉稍微有點不一樣的是,activity之間的跳轉有可能返回值。例如,從activity A跳轉到activity B,那麼當activity B運行結束時,有可能會給activity A一個返回值。這樣做在很多時候是相當方便的。

當打開一個新的屏幕時,之前一個屏幕會被置為暫停狀態,並且壓入歷史堆棧中。用戶可以通過回退操作返回到以前打開過的屏幕。可以選擇性的一處一些沒有必要保留的屏幕,因為Android會把每個應用的開始到當前的每個屏幕保存在堆棧中。

Android 開發的四大組件分別是:活動(activity),用於表現功能;服務(service),後台運行服務,不提供界面呈現;廣播接受者(Broadcast Receive),勇於接收廣播;內容提供者(Content Provider),支持多個應用中存儲和讀取數據,相當於資料庫。

2.服務

Service是android系統中的一種組件,跟activity的級別差不多,但是他不能自己運行,只能後台運行,並且可以和其他組件進行交互。Service是沒有界面長生命周期的代碼。Service是一種程序,可以運行很長時間的,但是卻沒有用戶界面。這么說有點枯燥,來看個例子。打開一個音樂播放器的程序,這時如果想上網,那麼打開Android瀏覽器,這時雖然已經進入瀏覽器這個程序,但是歌曲播放並沒有停止,而是在後台繼續一首接一首的播放,其實這個播放就是由播放音樂的Service進行控制。當然這個播放音樂的Service也可以停止。例如,當播放列表裡的歌曲都結束,或用戶按下了停止音樂播放的快捷鍵等。Service可以在很多場合的應用中使用,如播放多媒體時用戶啟動了其他Activity,這時程序要在後台繼續播放,比如檢測SD卡上文件的變化,或在後台記錄地理信息位置的改變等,而服務卻藏在後台。

開啟Service有兩種方式:

(1)Context.starService():Service會經歷onCreat ——>onStar(如果Service還沒有運行,則Android先調用onCreat(),然後調用onStar(),所以一個Service的onStar方能會重復調用多次);如果是調用者自己直接退出而沒有調用StopService,服務會一直在後台運行。該服務的調用者再啟動起來後可以通過stopService關閉服務。注意,多次調用Context.starService()不會被嵌套(即使會有相應的onStar()方法被調用),所以無論同一個服務被啟動多少次,一旦調用Context.stopService()或者StopSelf(),都會被停止。

說明:傳遞給starService()的Intent對象會傳遞給onStar()方法。調用順序為onCreat——onStar(可調用多次)——onDestroy.

(2)Context.bindService():服務會經歷onCreate()——onBind(),onBind將返回給客戶端一個IBind介面實例,IBind允許客戶端回調服務的方法,比如得到服務運行的狀態或其他操作。這個時候把調用者(Context,如Activity)會和服務綁定在一起,Context退出了,服務就會調用onUnbind——onDestroy相應退出,所謂綁定在一起就是「共存亡」了。

3.廣播接收器

在Android中,廣播是一種廣泛運用的在應用程序之間傳輸信息的機制。而廣播接收器是對發送出來的廣播進行過濾接受並響應的一類組件。可以使用廣播接收器來讓應用對一個外部時間做出響應。例如,當電話呼入這個外部事件到來時,可以利用廣播接收器進行處理。當下載一個程序成功完成時,仍然可以利用廣播接收器進行處理。廣播接收器不NotificationManager來通知用戶這些事情發生了。廣播接收器既可以在AndroidManifest.xml中注冊,也可以在運行時的代碼中使用Context.registerReceive()進行注冊。只要是注冊了,當事件來臨時,即使程序沒有啟動,系統也在需要的時候啟動程序。各種應用還可以通過使用Context.sendBroadcast()將它們自己的Intent廣播給其他應用程序。

4.內容提供者

內容提供者(Content Provider)是Android提供的第三方應用數據的訪問方案。

在Android中,對數據的保護是很嚴密的,除了放在SD卡中的數據,一個應用所持有的資料庫、文件等內容,都是不允許其他直接訪問的。Android當然不會真的把每一個應用都做成一座「孤島」,它為所有應用都准備可一扇窗,這就是Content Provider。應用想對外提供的數據,可以通過派生Content Provider類,封裝成一枚Content Provider。每個Content Provider都用一個uri作為獨立的標識,形如:content://com.xxxxx。所有應用看著像REST的樣子,但實際上它比REST更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的;另一種是列表的,但實現者不需要按照這個模式來做,給id的uri也可以返回列表類型的數據。

❺ 安卓開發的基礎問題

1. 資源
所有的UI指南都可以在這里找到。有些時候我們需要快速地找到資源,我們需要工具欄圖標、主題、其他圖標和各種安卓應用需要的設計資源。Android Assets Studio是最佳工具之一。它可以為你生成各種解析度 (mdpi, hdpi, xhdpi)的啟動器、標簽、工具欄、菜單圖標,可以按照你的配色生成主題,還可以生成工具欄資源 適用於Sherlock Action Bar。轉換和縮放DPI是很痛苦的,所以你需要Android Dpi Calculator
2. UI組件
只要遵循安卓官方的UI設計理念,我們就在重用UI組件。有很多優秀的通用組件可以利用,當然你可以基於他們開發適合自己的組件。你可以在Android Views上找到他們。這里我只提出幾個「必備的」組件:
Sherlock Action Bar:作者Jake Wharton。這個工具欄設計擴展了支持函數庫,可以通過一個API操作各個版本的安卓工具欄。該函數庫會在合適的時候自動調用原生工具欄,也可以在你布局基礎上封裝一個自定義實現。這樣你就可以很輕松地為各種2.x及以上的安卓版本開發一個帶工具欄的應用。
Sliding Menu :這是時下非常流行的UI模式。Google Play市場上很多最佳應用都採用了這個UI模式,比如Google Plus、Facebook、Youtube以及其他的應用程序都採用了Sliding Menu。
Cards:一個非常漂亮簡介的UI組件,可以讓你的應用看起來和Google Home一樣。你可以在屏幕上添加一個或者層疊若干個卡片。
3. 函數庫
安卓應用不僅僅是UI,還包括了很多顏色和圖片資源。Optimus Prime(譯著:《變形金剛》裡面正義一方的領袖)曾經說過:「真相不只是眼前所見」。我們還需要編寫後台代碼載入和緩存圖片、加快與伺服器通訊、編寫資料庫操作工具等等。接下來,我們理所應當地會重用一些最佳實踐代碼。我的最愛(以及常用的工具)包括:
Android Universal Loader:高度可定製圖片下載和載入函數庫。支持從緩存或文件載入,配置非常簡單。
Spring for Android:如果你沒有聽說過Spring…那麼請先去搜索一下。這個最流行的Java框架已經將他的產品線延伸到了移動領域。正如他們所說「移動就是未來」。Spring for android提供了幾個很棒的函數庫和框架,包括:
Spring RESTtemplate:一個非常流行的基於Java REST客戶端。Spring for Android RestTemplate模塊提供了一個可以在安卓環境下工作的RestTemplate版本,為你的安卓應用程序提供了一個非常靈活的REST API。
驗證支持:OAuth是該領域快速崛起一個的協議。OAuth是一個開源協議,為用戶提供第三方應用支持,提供對其他網站受限資源或服務的訪問。
Square:他們在GitHub上發布了很多優秀的函數庫。我最喜歡的是RetoFit,正如他的介紹那樣「一個類型安全的安卓和Java REST客戶端」。
OrmLite :編寫和維護資料庫表通常是很乏味的。OrmLite是一個支持安卓和sqlite的ORM框架。通常完成這項工作會有數不清的備選工具,但是如果你正在創建一個需要很大資料庫的應用也許OrmLite會是你的最佳選擇。最好的事情是——OrmLite是通過註解驅動的。
AndroidAnnotations:UI和代碼之間的粘合劑,通過它可以編寫更少的代碼並且輕松維護現存的代碼。
4. 測試
作為開發者,我們會不時地進行一些測試。畢竟,我們必須確保開發的程序能正常工作。能遵循測試驅動開發(TDD)當然最好,但是有時候我們只需要一些簡單的測試。這只是我個人的看法,最終選擇權始終在你手上。
Monkey:檢查應用是否會出現ANR(譯者註: ApplicationNotResponding應用程序無響應)的最簡單、快速和有效的方法。它會在你的應用上執行N次隨機點擊。你可以在午休時運行一下Monkey。
Android Test :一個基於JUnit的安卓測試框架。它提供了所有類型的測試。你可以為UI/活動編寫測試用例。功能測試或者黑盒UI測試不要求測試者對應用的實現細節非常了解,只需要從用戶角度了解執行特定動作或者輸入特定內容會有怎樣的輸出結果。這個方法可以讓開發和測試人員在你的組織里獨立地工作。
Robotium :這是一個安卓自動化測試框架,支持原生應用和混合型應用。通過Robotium你可以輕松地編寫功能強大、健壯性好的黑盒測試用例。測試開發者可以編寫涵蓋各種安卓操作的功能測試、系統測試和驗收測試用例。此外,Robotium還有一個非常活躍的開發者論壇。
雲端測試:你可以在大量設備上運行你的測試並獲得所有崩潰和錯誤信息。相關的工具有:
Skyforge
BitBar
CloudMonkey
Perfecto Mobile
他們不是免費的,但確實好用。
5. 構建
這是我最喜歡的部分。我們日復一日、年復一年地工作…..是時候展示自己的產品了。你的應用可能會分付費版、免費版或專屬版。他們會有通用的部分和一些專有邏輯。也許你會有一個為100個客戶定製的應用,不同的包名、顏色、名稱、各種資源和產品風格…..我剛才提到了構建版本嗎?一個開發版、不同階段的測試版、生產測試版、客戶Beta版…..(軟體版本命名)等等。
在一天工作結束的時候,秘密就在維護和管理發布流程。對於這項工作,我只推薦下面幾個構建工具。
Ant:我從Ant開始,因為它是Java開發者最熟悉的一個工具。如果你通過Ant構建一個安卓項目,你會編寫一個包含了所有默認構建任務的build.xml,它會為你完成一些簡單的工作。如果你需要更高級的功能,深呼吸准備好進一步鑽研吧……如果要進行依賴管理,這是更艱巨的任務。
Maven:我的一個朋友曾經說過:「Maven管理安卓應用只有Hello World」。Maven從未被谷歌或者安卓官方支持。社區開發的幾個Maven插件在安卓構建工具的每個新版本上都會崩潰。Maven配置困難,但維護和運行很容易。它的依賴管理做的很好,但是很多安卓函數庫並沒有包含在Maven主倉庫。
Gradle:谷歌IO 2013發布了Gradle。它是安卓官方支持的構建工具,也是Android Studio IDE的一部分。Spring和其他幾個業界巨頭也都支持Gradle。我發現Gradle的語法簡單而且易於理解。我成功地構建了一個簡單項目,一個帶有復雜構建邏輯的項目並在24小時內從ant/maven上移植了3個項目到Gradle。Gradle的依賴管理很棒,支持從Maven和Ivy倉庫獲取(pulling)文件以及多項目構建。

❻ android手機里qq rest文件夾是什麼啊

一個沒有價值的文件夾 既沒有帳號也沒有密碼更沒有任何可二次利用的緩存數據

如果你不是搞IT技術的直接無視就行了 記得不要刪除,可能會引起系統不穩定

❼ Android四大組件是什麼講講你對它們的理解

Android有四大組件:Activity、Service、Broadcast Receiver、Content Provider。

Activity

做一個完整的Android程序,不想用到Activity,真的是比較困難的一件事情,除非是想做綠葉想瘋了。因為Activity是Android程序與用戶交互的窗口,在我看來,從這個層面的視角來看,Android的Activity特像網站的頁面。

Activity,在四大組件中,無疑是最復雜的,這年頭,一樣東西和界面掛上了勾,都簡化不了,想一想,獨立做一個應用有多少時間淪落在了界面上,就能琢磨清楚了。從視覺效果來看,一個Activity占據當前的窗口,響應所有窗口事件,具備有控制項,菜單等界面元素。從內部邏輯來看,Activity需要為了保持各個界面狀態,需要做很多持久化的事情,還需要妥善管理生命周期,和一些轉跳邏輯。對於開發者而言,就需要派生一個Activity的子類,然後埋頭苦幹上述事情。對於Activity的更多細節,先可以參見:reference/android/app/Activity.html。後續,會獻上更為詳盡的剖析。

Service

服務,從最直白的視角來看,就是剝離了界面的Activity,它們在很多Android的概念方面比較接近,都是封裝有一個完整的功能邏輯實現,只不過Service不拋頭露臉,只是默默無聲的做堅實的後盾。

但其實,換個角度來看,Android中的服務,和我們通常說的Windows服務,Web的後台服務又有一些相近,它們通常都是後台長時間運行,接受上層指令,完成相關事務的模塊。用運行模式來看,Activity是跳,從一個跳到一個,呃...,這有點像模態對話框(或者還像web頁面好了...),給一個輸入(抑或沒有...),然後不管不顧的讓它運行,離開時返回輸出(同抑或沒有...)。

而Service不是,它是等,等著上層連接上它,然後產生一段持久而纏綿的通信,這就像一個用了Ajax頁面,看著沒啥變化,偷偷摸摸的和Service不知眉來眼去多少回了。

但和一般的Service還是有所不同,Android的Service和所有四大組件一樣,其進程模型都是可以配置的,調用方和發布方都可以有權利來選擇是把這個組件運行在同一個進程下,還是不同的進程下。這句話,可以拿把指甲刀刻進腦海中去,它凸顯了Android的運行特徵。如果一個 Service,是有期望運行在於調用方不同進程的時候,就需要利用Android提供的RPC機制,為其部署一套進程間通信的策略。

Android的RPC實現,如上圖所示(好吧,也是從SDK中拿來主義的...),無甚稀奇,基於代理模式的一個實現,在調用端和服務端都去生成一個代理類,做一些序列化和反序列化的事情,使得調用端和伺服器端都可以像調用一個本地介面一樣使用RPC介面。

Android中用來做數據序列化的類是Parcel,參見:/reference/android/os/Parcel.html,封裝了序列化的細節,向外提供了足夠對象化的訪問介面,Android號稱實現非常高效。

還有就是AIDL (Android Interface Definition Language) ,一種介面定義的語言,服務的RPC介面,可以用AIDL來描述,這樣,ADT就可以幫助你自動生成一整套的代理模式需要用到的類,都是想起來很乏力寫起來很苦力的那種。更多內容,可以再看看:guide/developing/tools/aidl.html,如果有興致,可以找些其他PRC實現的資料lou幾眼。

關於Service的實現,還強推參看API Demos這個Sample裡面的RemoteService實現。它完整的展示了實現一個Service需要做的事情:那就是定義好需要接受的Intent,提供同步或非同步的介面,在上層綁定了它後,通過這些介面(很多時候都是RPC的...)進行通信。在RPC介面中使用的數據、回調介面對象,如果不是標準的系統實現(系統可序列化的),則需要自定義aidl,所有一切,在這個Sample里都有表達,強薦。

Service從實現角度看,最特別的就是這些RPC的實現了,其他內容,都會接近於Activity的一些實現,也許不再會詳述了。

Broadcast Receiver

在實際應用中,我們常需要等,等待系統抑或其他應用發出一道指令,為自己的應用擦亮明燈指明方向。而這種等待,在很多的平台上,都會需要付出不小的代價。

比如,在Symbian中,你要等待一個來電消息,顯示歸屬地之類的,必須讓自己的應用忍辱負重偷偷摸摸的開機啟動,消隱圖標隱藏任務項,潛伏在後台,監控著相關事件,等待轉瞬即逝的出手機會。這是一件很發指的事情,不但白白耗費了系統資源,還留了個流氓軟體的罵名,這真是賣力不討好的正面典型。

在Android中,充分考慮了廣泛的這類需求,於是就有了Broadcast Receiver這樣的一個組件。每個Broadcast Receiver都可以接收一種或若干種Intent作為觸發事件(有不知道Intent的么,後面會知道了...),當發生這樣事件的時候,系統會負責喚醒或傳遞消息到該Broadcast Receiver,任其處置。在此之前和這以後,Broadcast Receiver是否在運行都變得不重要了,及其綠色環保。

這個實現機制,顯然是基於一種注冊方式的,Broadcast Receiver將其特徵描述並注冊在系統中,根據注冊時機,可以分為兩類,被我冠名為冷熱插拔。所謂冷插拔,就是Broadcast Receiver的相關信息寫在配置文件中(求配置文件詳情?稍安,後續奉上...),系統會負責在相關事件發生的時候及時通知到該Broadcast Receiver,這種模式適合於這樣的場景。某事件方式 -> 通知Broadcast -> 啟動相關處理應用。比如,監聽來電、郵件、簡訊之類的,都隸屬於這種模式。而熱插拔,顧名思義,插拔這樣的事情,都是由應用自己來處理的,通常是在 OnResume事件中通過registerReceiver進行注冊,在OnPause等事件中反注冊,通過這種方式使其能夠在運行期間保持對相關事件的關注。比如,一款優秀的詞典軟體(比如,有道詞典...),可能會有在運行期間關注網路狀況變化的需求,使其可以在有廉價網路的時候優先使用網路查詢詞彙,在其他情況下,首先通過本地詞庫來查詞,從而兼顧腰包和體驗,一舉兩得一石二鳥一箭雙雕(注,真實在有道詞典中有這樣的能力,但不是通過 Broadcast Receiver實現的,僅以為例...)。而這樣的監聽,只需要在其工作狀態下保持就好,不運行的時候,管你是天大的網路變化,與我何干。其模式可以歸結為:啟動應用 -> 監聽事件 -> 發生時進行處理。

除了接受消息的一方有多種模式,發送者也有很重要的選擇權。通常,發送這有兩類,一個就是系統本身,我們稱之為系統Broadcast消息,在reference/android/content/Intent.html 的Standard Broadcast Actions,可以求到相關消息的詳情。除了系統,自定義的應用可以放出Broadcast消息,通過的介面可以是 Context.sendBroadcast,抑或是Context.sendOrderedBroadcast。前者發出的稱為Normal broadcast,所有關注該消息的Receiver,都有機會獲得並進行處理;後者放出的稱作Ordered broadcasts,顧名思義,接受者需要按資排輩,排在後面的只能吃前面吃剩下的,前面的心情不好私吞了,後面的只能喝西北風了。

當Broadcast Receiver接收到相關的消息,它們通常做一些簡單的處理,然後轉化稱為一條Notification,一次振鈴,一次震動,抑或是啟動一個 Activity進行進一步的交互和處理。所以,雖然Broadcast整個邏輯不復雜,卻是足夠有用和好用,它統一了Android的事件廣播模型,讓很多平台都相形見絀了。更多Broadcast Receiver相關內容,參見:/reference/android/content/BroadcastReceiver.html。

Content Provider

Content Provider,聽著就和數據相關,沒錯,這就是Android提供的第三方應用數據的訪問方案。在Android中,對數據的保護是很嚴密的,除了放在SD卡中的數據,一個應用所持有的資料庫、文件、等等內容,都是不允許其他直接訪問的,但有時候,溝通是必要的,不僅對第三方很重要,對應用自己也很重要。

比如,一個聯系人管理的應用。如果不允許第三方的應用對其聯系人資料庫進行增刪該查,整個應用就失去了可擴展力,必將被其他應用拋棄,然後另立門戶,自個玩自個的去了。

Andorid當然不會真的把每個應用都做成一座孤島,它為所有應用都准備了一扇窗,這就是Content Provider。應用想對外提供的數據,可以通過派生ContentProvider類, 封裝成一枚Content Provider,每個Content Provider都用一個uri作為獨立的標識,形如:content://com.xxxxx。所有東西看著像REST的樣子,但實際上,它比REST 更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的,另一種是列

表的,但實現者不需要按照這個模式來做,給你id的uri你也可以返回列表類型的數據,只要調用者明白,就無妨,不用苛求所謂的REST。

另外,Content Provider不和REST一樣只有uri可用,還可以接受Projection,Selection,OrderBy等參數,這樣,就可以像資料庫那樣進行投影,選擇和排序。查詢到的結果,以Cursor(參見:reference/android/database/Cursor.html )的形式進行返回,調用者可以移動Cursor來訪問各列的數據。

Content Provider屏蔽了內部數據的存儲細節,向外提供了上述統一的介面模型,這樣的抽象層次,大大簡化了上層應用的書寫,也對數據的整合提供了更方便的途徑。Content Provider內部,常用資料庫來實現,Android提供了強大的Sqlite支持,但很多時候,你也可以封裝文件或其他混合的數據。

在Android中,ContentResolver是用來發起Content Provider的定位和訪問的。不過它僅提供了同步訪問的Content Provider的介面。但通常,Content Provider需要訪問的可能是資料庫等大數據源,效率上不足夠快,會導致調用線程的擁塞。因此Android提供了一個AsyncQueryHandler(參見:reference/android/content/AsyncQueryHandler.html),幫助進行非同步訪問Content Provider。

在各大組件中,Service和Content Provider都是那種需要持續訪問的。Service如果是一個耗時的場景,往往會提供非同步訪問的介面,而Content Provider不論效率如何,都提供的是約定的同步訪問介面。我想這遵循的就是場景導向設計的原則,因為Content Provider僅是提供數據訪問的,它不能確信具體的使用場景如何,會怎樣使用它的數據;而相比之下,Service包含的邏輯更復雜更完整,可以抉擇大部分時候使用某介面的場景,從而確定最貼切的介面是同步還是非同步,簡化了上層調用的邏輯。

❽ 如何在Android使用Rest 服務

我們就以如下網路商店的Rest服務為例,看看我們通過Android客戶端是如何進行調用的(這里只介紹如何發送請求,並獲得伺服器響應)。

Android類庫中已經為我們提供了一切我們需要的東西。
Rest的原理就是向一個資源的URI發送GET、POST、PUT和DELETE進行獲取、創建、保存、刪除操作。

第一步我們看看如何請求獲得所有商品信息:
//創建一個http客戶端
HttpClient client=new DefaultHttpClient();
//創建一個GET請求
HttpGet httpGet=new HttpGet("http://www.store.com/procts");
//向伺服器發送請求並獲取伺服器返回的結果
HttpResponse response=client.execute(httpGet);
//返回的結果可能放到InputStream,http Header中等。
InputStream inputStream=response.getEntity().getContent();
Header[] headers=response.getAllHeaders();
通過解析伺服器返回的流,我們可以將它轉為字元串,獲取相應的數據。

第二步可以向伺服器增加商品,同樣的道理,我們創建一個POST請求,帶上相關的商品信息即可。
//創建一個http客戶端
HttpClient client=new DefaultHttpClient();
//創建一個POST請求
HttpPost httpPost=new HttpPost("http://www.store.com/proct");
//組裝數據放到HttpEntity中發送到伺服器
final List dataList = new ArrayList();
dataList.add(new BasicNameValuePair("proctName", "cat"));
dataList.add(new BasicNameValuePair("price", "14.87"));
HttpEntity entity = new UrlEncodedFormEntity(dataList, "UTF-8");
httpPost.setEntity(entity);
//向伺服器發送POST請求並獲取伺服器返回的結果,可能是增加成功返回商品ID,或者失敗等信息
HttpResponse response=client.execute(httpPost);
第三步是如果修改商品信息,我們只需要創建一個PUT請求,帶上要修改的參數即可。本例假設第三步中增加的商品返回ID為1234,下面將為商品的價格修改為11.99.

//創建一個http客戶端
HttpClient client=new DefaultHttpClient();
//創建一個PUT請求
HttpPut httpPut=new HttpPut("http://www.store.com/proct/1234");
//組裝數據放到HttpEntity中發送到伺服器
final List dataList = new ArrayList();
dataList.add(new BasicNameValuePair("price", "11.99"));
HttpEntity entity = new UrlEncodedFormEntity(dataList, "UTF-8");
httpPut.setEntity(entity);
//向伺服器發送PUT請求並獲取伺服器返回的結果,可能是修改成功,或者失敗等信息
HttpResponse response=client.execute(httpPut);
第四步我們把上面增加的商品刪除,只需要向伺服器發送一個DELETE請求即可。

//創建一個http客戶端
HttpClient client=new DefaultHttpClient();
//創建一個DELETE請求
HttpDelete httpDelete=new HttpDelete("http://www.store.com/proct/1234");
//向伺服器發送DELETE請求並獲取伺服器返回的結果,可能是刪除成功,或者失敗等信息
HttpResponse response=client.execute(httpDelete);
好了,就這么簡單,這樣就實現了從android客戶端調用Rest服務對資源進行增、刪、改、查操作。

希望本文對您有所幫助!

❾ android有幾種請求方式okhttp restful

這個問題有點問題,這並不是三種方式,okhttp只是對網路訪問的一個更高層的封裝,httpURLConnection和httpClient是具體兩種實現訪問的方式。

❿ 一個最簡單的供Android調用webService的rest服務端怎麼搭建

Eclipse+Axis2構建WebService實戰總結

什麼是webservice?

企業提供特定的服務service,其他用戶通過internet即web訪問這些服務。換句話說,WebService是兩個計算機之間通訊(交談)的技術,網路中一台計算機想要調用另一台計算機的方法時,此時可以需要WebService。很火的SOA、雲計算在技術層面上都是WebService

用程序員的觀點就是:企業提供實現某功能的函數,其他用過通過在線訪問這些函數。

webservice兩個重要文件:.aar:服務包文件,提供服務,.wsdl:web服務介面定義語言文件,供客戶端使用。

webservice關鍵技術

1、XML:可擴展的標記語言(XML)是Web service平台中表示數據的基本格式。除了易於建立和易於分析外,XML主要的優點在於它既是平台無關的,又是廠商無關的。

2、SOAP:SOAP是web service的標准通信協議,SOAP為simple object access protocoll的縮寫,簡單對象訪問協議.它是一種標准化的傳輸消息的XML消息格式。即XML文件的消息格式,由這個協議來決定。SOAP簡單的理解,就是這樣的一個開放協議SOAP=RPC+HTTP+XML:採用HTTP作為底層通訊協議;RPC作為一致性的調用途徑,xml作為數據傳送的格式。

3、Axis2:Axis2是實現Web Service的一種技術框架,是新一代的SOAP引擎,即通過這個架構很方便地實現webservice.即在服務端通過這個技術支持,很方便地發布webservice服務,使開發只關注具體的商業實現,而由這個框架直接發布,節省了開發者的時間。在客戶端同樣只關注調用。為了使用這個框架,在3個地方需要部署Axis2的庫:web伺服器tomcat上、eclipse服務端開發axis2庫、eclipse客戶端開發ksoap2庫。

4、WSDL:WSDL的全稱是web service Description Language,是一種基於XML格式的關於web服務的描述語言。其主要目的在於web service的提供者將自己的web服務的所有相關內容,如所提供的服務的傳輸方式,服務方法介面,介面參數,服務路徑等,生成相應的完全文檔,發布給使用者。使用者可以通過這個WSDL文檔,創建相應的SOAP請求消息,通過HTTP傳遞給webservice提供者;web服務在完成服務請求後,將SOAP返回消息傳回請求者,服務請求者再根據WSDL文檔將SOAP返回消息解析成自己能夠理解的內容。

5、UDDI:UDDI 是一種目錄服務,企業可以使用它對 Web services 進行注冊和搜索。UDDI,英文為 "Universal Description, Discovery and Integration",可譯為「通用描述、發現與集成服務」。UDDI是一種創建注冊表服務的規范,以便大家將自己的web service進行注冊發布供使用者查找.然而當服務提供者想將自己的web service向全世界公布,以便外部找到其服務時,那麼服務提供者可以將自己的web service注冊到相應的UDDI商用注冊網站,目前全球有IBM等4家UDDI商用注冊網站。因為WSDL文件中已經給定了web service的地址URI,外部可以直接通過WSDL提供的URI進行相應的web service調用。所以UDDI並不是一個必需的web service組件,服務方完全可以不進行UDDI的注冊。

webservice服務端的實現

1、tomcat伺服器部署:部署Axis2到tomcat:將Axis2.war解壓到tomcat的webapps目錄下即可,如果有資料庫連接,需把資料庫連接jar包添加到tomcat的lib目錄下,如:oracle的ojdbc14.jar,和mysql的 mysql-connector-java-3.1.11-bin.jar。部署成功後,啟動tomcat,可通過http://localhost:8080/axis2/訪問,查看是否部署成功。webservice的axis服務存檔aar發布文件就發布到tomcat\webapps\axis2\WEB-INF\services這個目錄下

2、安裝axis2插件到eclipse:解壓插件,直接拷貝到eclipse的插件目錄plugins,兩個插件為:org.apache.axis2.eclipse.codegen.plugin_1.6.0.jar、org.apache.axis2.eclipse.service.plugin_1.6.0.jar。打開Eclipse,選擇File/New/Other菜單項,看到如下界面表明安裝成功:

安裝這兩個插件的目的是:方便生成Axis2的服務包(.aar文件)和生成Axis2客戶端

3、打包生成axis2服務包:

選擇服務程序類文件所在的目錄,不包括包,選中Include..,表示在生成的服務包中只包括類文件,不包括其他文件。

選擇跳過WSDL文件,WSDL文件會在部署這個服務到Tomcat後,有Axis2自動生成,通過http://localhost:8080/axis2/services/newWs?wsdl可以查看文件內容。

注意:WSDL是web服務定義語言,通過XML的方式對該服務類進行描述,客戶端訪問服務時要用到這個文件,可以生成這個文件給客戶端,也可以上面的在線獲取這個文件。

點擊「next」,進入添加服務需要的庫文件界面:

需要的庫文件直接部署到tomcat中,此處不需要添加,進入下一界面:

選擇自動生成service.xml文件。點擊進入下一界面:

輸入服務名和類名,點擊load即可找出該服務程序的全部方法。

輸入發布路徑,和文件名。生成newWs.aar服務包文件。

部署完成後,輸入http://localhost:8080/axis2/services/listServices,即可看到已部署的全部服務。

eclipse中webservice不能發布的原因:

1、界面問題,把發布界面最大化或拖拽,是界面刷新,就可以看到輸入界面了。

2、發布界面最後一步,load時,沒有任何反映,是這個類的代碼有問題,例如有載入動態庫的代碼,動態庫找不到,則會沒有反映。

3、代碼沒改變的情況下好像只能生成一次,想在生成的話,需要改代碼,或需要重啟eclipse

webservie服務端:java調用C++動態庫的實現

1、在eclipse中編寫一個java類文件,應用中的其他類可以調用這個類中的函數:

[cpp] view plainprint?
01.package util;
02.
03.public class InvokeDll
04.{
05. //測試函數
06. public native int testFunc(int a, int b);
07.
08. //獲取最近一次錯誤代碼
09. public native int lastErr();
10.}
package util;

public class InvokeDll
{
//測試函數
public native int testFunc(int a, int b);

//獲取最近一次錯誤代碼
public native int lastErr();
}

注意:函數要用native修飾符

2、用javah命令生成C++可調用的.h文件

a、上述java類編譯生成類文件InvokeDll.class

b、set classpath="D:\teatInvokeDll\bin",類文件生成在D:\testInvokeDll\bin\util\InvokeDll.class
c、命令行進入D:\teatInvokeDll\bin

d、javah util.InvokeDll
你會發現當前目錄下多了一個util_InvokeDll.h文件,文件內容如下:

[cpp] view plainprint?
01./* DO NOT EDIT THIS FILE - it is machine generated */
02.#include <jni.h>
03./* Header for class util_InvokeDll */
04.
05.#ifndef _Included_util_InvokeDll
06.#define _Included_util_InvokeDll
07.#ifdef __cplusplus
08.extern "C" {
09.#endif
10./*
11. * Class: util_InvokeDll
12. * Method: testFunc
13. * Signature: (II)I
14. */
15.JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc
16. (JNIEnv *, jobject, jint, jint);
17.
18./*
19. * Class: util_InvokeDll
20. * Method: lastErr
21. * Signature: ()I
22. */
23.JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr
24. (JNIEnv *, jobject);
25.
26.#ifdef __cplusplus
27.}
28.#endif
29.#endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class util_InvokeDll */

#ifndef _Included_util_InvokeDll
#define _Included_util_InvokeDll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: util_InvokeDll
* Method: testFunc
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc
(JNIEnv *, jobject, jint, jint);

/*
* Class: util_InvokeDll
* Method: lastErr
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
3、在VC中生成dll如java2dll.dll

a、新建一個空的dll工程,名叫java2dll。

b、把util_InvokeDll.h頭文件復制到工程目錄下,並添加到header files文件夾里。

c、在source files文件目錄中添加一個java2dll.cpp,文件內容是頭文件里的方法的實現:

[cpp] view plainprint?
01.#include <stdio.h>
02.#include "util_InvokeDll.h"
03.
04.JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc(JNIEnv *, jobject, jint a, jint b)
05.{
06. int i=0;
07. /*HMODULE hMole = ::LoadLibrary("test.dll");
08.
09. PFUN newfun = (PFUN)::GetProcAddress(hMole,"testFn");
10. i = newfun(a,b);
11. ::FreeLibrary(hMole);
12. */
13. i=a+b;
14. return i;
15.}
16.
17.JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr(JNIEnv *, jobject)
18.{
19. int i=0;
20. return i;
21.}
#include <stdio.h>
#include "util_InvokeDll.h"

JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc(JNIEnv *, jobject, jint a, jint b)
{
int i=0;
/*HMODULE hMole = ::LoadLibrary("test.dll");

PFUN newfun = (PFUN)::GetProcAddress(hMole,"testFn");
i = newfun(a,b);
::FreeLibrary(hMole);
*/
i=a+b;
return i;
}

JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr(JNIEnv *, jobject)
{
int i=0;
return i;
}d、點擊「運行」->「編譯」,這時你會看到很多數據類型沒被聲明的錯誤,那是因為util_InvokeDll.h使用了很多JAVA_HOME/include/jni.h文件自定義的數據類型,而jni.h又引
用了JAVA_HOME/include/win32/jni_md.h,這時你需要把jni.h和jni_md.h引入到工程裡面來,左擊工程名「工程屬性」->「文件/目錄」->「包含文件目錄」把JAVA_HOME/include和JAVA_HOME/include/win32文件夾添加,確定後,再次編譯一切正常,這時在工程的目錄下就找到java2dll.dll文件,這樣dll文件就生成了
4、調用其他標準的C++動態庫,如test.dll

例如test.dll,是其他人編寫的標準的C++動態庫,可以在上述注釋掉的部分調用,testFn是它裡面的函數。

5、在webservice端的java調用

載入庫Java2dll,並調用介面函數:

[cpp] view plainprint?
01.static
02.{
03. //動態庫dll文件要放到系統目錄或用絕對路徑凋用System.load("絕對路徑")
04. System.loadLibrary("Java2dll");
05.}
06.
07./實例化調用類
08.InvokeDll dll = new InvokeDll();
09.
10.//調用函數
11.String strRet = dll.testFunc(a, b)
static
{
//動態庫dll文件要放到系統目錄或用絕對路徑凋用System.load("絕對路徑")
System.loadLibrary("Java2dll");
}

//實例化調用類
InvokeDll dll = new InvokeDll();

//調用函數
String strRet = dll.testFunc(a, b)


總結:調用過程:java普通類-->java native類-->jni C++ 動態庫-->標准C++動態庫,最終實現java普通類對標准C++動態庫的調用。

熱點內容
java培訓課程有那些 發布:2024-09-08 11:11:30 瀏覽:651
舊筆記本如何裝安卓系統 發布:2024-09-08 11:10:20 瀏覽:952
安卓怎麼關閉藍牙自動連接 發布:2024-09-08 10:58:12 瀏覽:11
tsm伺服器修改ip地址 發布:2024-09-08 10:21:06 瀏覽:615
共享雲源碼 發布:2024-09-08 10:01:10 瀏覽:397
ios應用上傳 發布:2024-09-08 09:39:41 瀏覽:441
ios儲存密碼哪裡看 發布:2024-09-08 09:30:02 瀏覽:874
opensslcmake編譯 發布:2024-09-08 09:08:48 瀏覽:653
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:744
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:173