當前位置:首頁 » 安卓系統 » androidprotocol

androidprotocol

發布時間: 2022-04-30 22:07:19

Ⅰ android 網路請求數據一般寫在哪

在iOS開發中有大名鼎鼎的ASIHttpRequest庫,用來處理網路請求操作,今天要介紹的是一個在Android上同樣強大的網路請求庫android-async-http,目前非常火的應用Instagram和Pinterest的Android版就是用的這個網路請求庫。這個網路請求庫是基於Apache HttpClient庫之上的一個非同步網路請求處理庫,網路處理均基於Android的非UI線程,通過回調方法處理請求結果。

其主要特徵如下:

■處理非同步Http請求,並通過匿名內部類處理回調結果
■Http請求均位於非UI線程,不會阻塞UI操作
■通過線程池處理並發請求
■處理文件上傳、下載
■響應結果自動打包JSON格式
■自動處理連接斷開時請求重連
使用android-async-http也非常簡單,到官網下載依賴jar包,導入工程中libs文件夾下並添加到工程路徑即可。

Ⅱ android 怎麼與websocket 通訊

Android與伺服器通信通常採用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post兩種方式。至於Socket通信會在以後的博文中介紹。 HTTP協議簡介: HTTP (Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種協議。 HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為“一次連接”。在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。 由於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種“短連接”、“無狀態”,要保持客戶端程序的在線狀態,需要不斷地向伺服器發起連接請求。通常的做法是即使不需要獲得任何數據,客戶端也保持每隔一段固定的時間向伺服器發送一次“保持連接”的請求,伺服器在收到該請求後對客戶端進行回復,表明知道客戶端“在線”。若伺服器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到伺服器的回復,則認為網路已經斷開。 基於HTTP1.0協議的客戶端在每次向伺服器發出請求後,伺服器就會向客戶端返回響應消息,在確認客戶端已經收到響應消息後,服務端就會關閉網路連接。在這個數據傳輸過程中,並不保存任何歷史信息和狀態信息,因此,HTTP協議也被認為是無狀態的協議。 HTTP1.1和HTTP1.0相比較而言,最大的區別就是增加了持久連接支持。當客戶端使用HTTP1.1協議連接到伺服器後,伺服器就將關閉客戶端連接的主動權交還給客戶端;也就是說,只要不調用Socket類的close方法關閉網路連接,就可以繼續向伺服器發送HTTP請求。 HTTP連接使用的是“請求—響應”的方式(2次握手),不僅在請求時需要先建立連接,而且需要客戶端向伺服器發出請求後,伺服器端才能回復數據。而Socket連接在雙方建立起連接後就可以直接進行數據的傳輸 HTTP協議的特點: 支持B/S及C/S模式; 簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。 靈活:HTTP 允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type 加以標記; 無狀態:HTTP 協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。 HTTP協議請求方法: 請求行中包括了請求方法,解釋如下: GET 請求獲取Request-URI 所標識的資源; POST 在Request-URI 所標識的資源後附加新的數據; HEAD 請求獲取由Request-URI 所標識的資源的響應消息報頭 PUT 請求伺服器存儲一個資源,並用Request-URI 作為其標識 DELETE 請求伺服器刪除Request-URI 所標識的資源; TRACE 請求伺服器回送收到的請求信息,主要用於測試或診斷 CONNECT 保留將來使用 OPTIONS 請求查詢伺服器的性能,或者查詢與資源相關的選項和需求 Get與Post請求區別: Post請求可以向伺服器傳送數據,而且數據放在HTML HEADER內一起傳送到服務端URL地址,數據對用戶不可見。而get是把參數數據隊列加到提交的URL中,值和表單內各個欄位一一對應, 例如(/s?w=%C4&inputT=2710) get 傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。 get安全性非常低,post安全性較高。 項目結構圖: get方式: get機制用的是在URL地址裡面通過?號間隔,然後以name=value的形式給客戶端傳遞參數。所以首先要在Android工程下的AndroidGetTest.java中onCreate方法定義好其URL地址以及要傳遞的參數,然後通過URL打開一個HttpURLConnection鏈接,此鏈接可以獲得InputStream位元組流對象,也是往服務端輸出和從服務端返回數據的重要過程,而若服務端response.getInputStream.write()往andorid返回信息時候,就可以通過InputStreamReader作轉換,將返回來的數據用BufferReader顯示出來。 具體代碼如下: Servlet端接收數據並返回通知: Android端發送消息並接收Servlet返回的消息: post方式: post傳輸方式不在URL里傳遞,也正好解決了get傳輸量小、容易篡改及不安全等一系列不足。主要是通 過對HttpURLConnection的設置,讓其支持post傳輸方式,然後在通過相關屬性傳遞參數(若需要傳遞中文字元,則可以通過URLEncoder編碼,而在獲取端採用URLDecoder解碼即可)

Ⅲ android怎麼和websocket連接

Android與伺服器通信通常採用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post兩種方式。至於Socket通信會在以後的博文中介紹。HTTP協議簡介:HTTP(HypertextTransferProtocol),是Web聯網的基礎,也是手機聯網常用的協議之一

Ⅳ 什麼是android的等效nsurlprotocol從ios sdk

用來開發應用程序的。 軟體開發工具包是一些被軟體工程師用於為特定的軟體包、軟體框架、硬體平台、操作系統等創建應用軟體的開發工具的集合,一般而言SDK即開發Windows平台下的應用程序所使用的SDK。它可以簡單的為某個程序設計語言提供應用程序。

Ⅳ Android 開發時 adb shell 出現 error: protocol fault (no status)(環境:win8 x64)

問題背景:安裝apk是報error:protocol fault<no status>或error:device not found
解決方法:
1,啟動模擬器後,
2,輸入cmd命令,並進入cd D:\Android\sdk\platform-tools目錄(註:以現實情況為准,此處必須進入adb存放目錄)
D:\android\sdk\platform-tools>adb kill-server #關閉服務
D:\Android\sdk\platform-tools>adb start-server #重啟服務
備註:在網上查看相關信息,發現此問題產生原因:模擬器閑置一段時間,會出現異常。

Ⅵ android手機通過什麼協議與Windows系統進行文件傳輸的反之又是通過什麼協議

USB連接是通過MTP(Media Transfer Protocol)協議,如果是通過網路的話TCP或者UPD都行

Ⅶ android 即時通信。。如何實現

Android現在即時通訊(或者消息推送)有好幾個開源項目框架可以實現,可以使用XMPP來實現即時通信。

XMPP(Extensible Messageing and Presence Protocol:可擴展消息與存在協議)是目前主流的四種IM(IM:instant messaging,即時消息)協議之一,其他三種分別為:即時信息和空間協議(IMPP)、空間和即時信息協議(PRIM)、針對即時通訊和空間平衡擴充的進程開始協議SIP(SIMPLE)。

1. XMPP的前身是Jabber,一個開源形式組織產生的網路即時通信協議。XMPP目前被IETF國際標准組織完成了標准化工作。標准化的核心結果分為兩部分; 核心的XML流傳輸協議 基於XML流傳輸的即時通訊擴展應用 XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網路通信協議更規范的平台上。藉助於XML易於解析和閱讀的特性,使得XMPP的協議能夠非常漂亮。 XMPP的即時通訊擴展應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如AIM,QQ等有功能完整,完善等先進性。

2.XMPP中定義了三個角色,客戶端,伺服器,網關。通信能夠在這三者的任意兩個之間雙向發生。伺服器同時承擔了客戶端信息記錄,連接管理和信息的路由功能。網關承擔著與異構即時通信系統的互聯互通,異構系統可以包括SMS(簡訊),MSN,ICQ等。基本的網路形式是單客戶端通過TCP/IP連接到單伺服器,然後在之上傳輸XML。

3.傳輸的是與即時通訊相關的指令。在以前這些命令要麼用2進制的形式發送,要麼用純文本指令加空格加參數加換行苻的方式發送(比如MSN)。而XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。這不但使得解析容易了,人也容易閱讀了,方便了開發和查錯。而XMPP的核心部分就是一個在網路上分片斷發送XML的流協議。這個流協議是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一步利用的網路基礎協議。

Ⅷ android與伺服器交互的應用怎麼設計

筆者以前是學的Java EE,由於項目需要要開發Android,所以臨時補了一個多星期,主要是手機端和伺服器端交互,雙向開發的。 轉載

首先在伺服器端,我採用的是SSH框架,struts 2集合了JSON插件,伺服器和客戶端的信息交互採用的JSON來傳輸,由於在伺服器端用了Struts 2,所以我就用裝了一個JSON插件。這樣,很輕易的就把伺服器端的信息用JSON的形式發送到了手機端。以下是代碼:

首先,在伺服器端搭建好SSH框架,具體細節就不在陳述。struts.xml配置如下:

<packagename="login"extends="json-default">
<actionname="login"class="com.jclick.test.LoginAction"method="login">
<resulttype="json"><paramname="includeProperties">result</param></result>
</action>
</package>

<packagename="login"extends="json-default">
<actionname="login"class="com.jclick.test.LoginAction"method="login">
<resulttype="json"><paramname="includeProperties">result</param></result>
</action>
</package>
手機端的代碼如下:

首先,手機端有一個緩存類,主要用於緩存一些手機端需要訪問的數據,這樣的好處是可以達達節省手機和伺服器的交互,用單例實現的:

packagecom.jclick.cache;

importcom.jclick.bean.User;

publicclassCache{

privateUserUser;

privateCache(){

}
/**構造單例*/
privatestaticclassCacheHolder{
=newCache();
}
publicCachegetInstance(){
returnCacheHolder.INSTANCE;
}
publicUsergetUser(){
returnUser;
}
publicvoidsetUser(UserUser){
this.User=User;
}

}

packagecom.jclick.cache;

importcom.jclick.bean.User;

publicclassCache{

privateUserUser;

privateCache(){

}
/**構造單例*/
privatestaticclassCacheHolder{
=newCache();
}
publicCachegetInstance(){
returnCacheHolder.INSTANCE;
}
publicUsergetUser(){
returnUser;
}
publicvoidsetUser(UserUser){
this.User=User;
}

}
接著開始書寫手機端的協議,用戶向伺服器發送請求,同時伺服器反饋給手機端信息的:

packagecom.jclick.protocol;

importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importjava.util.List;

importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.message.BasicNameValuePair;
importorg.json.JSONException;
importorg.json.JSONObject;

publicclassBaseProtocol{
privateStringBuildersb=newStringBuilder();

privateHttpClienthttpClient;
privateHttpPosthttpRequest;
privateHttpResponseresponse;

privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>();

BaseProtocol(){
httpClient=newDefaultHttpClient();
}

/**
*向伺服器端發送請求
*
*@paramurl
*@throwsException
*/
protectedvoidpack(Stringurl)throwsException{
httpClient=newDefaultHttpClient();
httpRequest=newHttpPost(url);

httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair));
response=httpClient.execute(httpRequest);
}

/**
*得到返回數據
*
*@paramurl
*@return
*@throwsException
*/
protectedvoidparse()throwsException{
//TODO狀態處理500200
if(response.getStatusLine().getStatusCode()==200){

BufferedReaderbufferedReader2=newBufferedReader(
newInputStreamReader(response.getEntity().getContent()));
for(Strings=bufferedReader2.readLine();s!=null;s=bufferedReader2
.readLine()){
sb.append(s);
}
}
}

/**
*向伺服器發送信息
*
*@paramkey
*@paramvalue
*/
publicvoidaddNameValuePair(Stringkey,Stringvalue){
nameValuePair.add(newBasicNameValuePair(key,value));
}

/**
*返回JSONObject對象數據模型
*
*@return
*@throwsJSONException
*/
publicJSONObjectgetJSON()throwsJSONException{
returnnewJSONObject(sb.toString());
}

}

packagecom.jclick.protocol;

importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importjava.util.List;

importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.message.BasicNameValuePair;
importorg.json.JSONException;
importorg.json.JSONObject;

publicclassBaseProtocol{
privateStringBuildersb=newStringBuilder();

privateHttpClienthttpClient;
privateHttpPosthttpRequest;
privateHttpResponseresponse;

privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>();

BaseProtocol(){
httpClient=newDefaultHttpClient();
}

/**
*向伺服器端發送請求
*
*@paramurl
*@throwsException
*/
protectedvoidpack(Stringurl)throwsException{
httpClient=newDefaultHttpClient();
httpRequest=newHttpPost(url);

httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair));
response=httpClient.execute(httpRequest);
}

/**
*得到返回數據
*
*@paramurl
*@return
*@throwsException
*/
protectedvoidparse()throwsException{
//TODO狀態處理500200
if(response.getStatusLine().getStatusCode()==200){

BufferedReaderbufferedReader2=newBufferedReader(
newInputStreamReader(response.getEntity().getContent()));
for(Strings=bufferedReader2.readLine();s!=null;s=bufferedReader2
.readLine()){
sb.append(s);
}
}
}

/**
*向伺服器發送信息
*
*@paramkey
*@paramvalue
*/
publicvoidaddNameValuePair(Stringkey,Stringvalue){
nameValuePair.add(newBasicNameValuePair(key,value));
}

/**
*返回JSONObject對象數據模型
*
*@return
*@throwsJSONException
*/
publicJSONObjectgetJSON()throwsJSONException{
returnnewJSONObject(sb.toString());
}

}
接著是登陸協議,在這里我只是模擬登陸使用的一個類,僅供大家參考:

packagecom.jclick.protocol;

importorg.json.JSONObject;

importcom.jclick.bean.User;

{

privatefinalstaticStringURL="http://localhost:8080/test/login";

publicbooleancheckLogin(Userusr){
try{
pack(URL);
parse();
JSONObjectobj=this.getJSON();
if(obj.getString("result").equals("failed")){
returnfalse;
}else{
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}

}

packagecom.jclick.protocol;

importorg.json.JSONObject;

importcom.jclick.bean.User;

{

privatefinalstaticStringURL="http://localhost:8080/test/login";

publicbooleancheckLogin(Userusr){
try{
pack(URL);
parse();
JSONObjectobj=this.getJSON();
if(obj.getString("result").equals("failed")){
returnfalse;
}else{
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}

}
然後是User實體類,主要用於保存用戶信息:

packagecom.jclick.bean;

publicclassUser{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}

}

packagecom.jclick.bean;

publicclassUser{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}

}
最後就是LoginActivity里邊判斷登陸的代碼了,詳細代碼不再貼出來了,僅貼一個判斷登陸的代碼:

privatevoidcheckedData(){
username=((EditText)findViewById(R.id.username)).getText().toString();
password=((EditText)findViewById(R.id.password)).getText().toString();

Useruser=newUser();
user.setUsername(username);
user.setPassword(password);
LoginProtocollogin=newLoginProtocol();
booleanresult=login.checkLogin(user);

if(result){SpiderCache.getInstance().setUserSession(user);
Toast.makeText(getApplicationContext(),"登錄成功",1000).show();
Intentintent=newIntent();
intent.setClass(LoginActivity.this,WelcomeActivity.class);
startActivity(intent);
}else{Toast.makeText(LoginActivity.this,"密碼或用戶名不匹配,請重新輸入!",1000).show();
}
}

privatevoidcheckedData(){
username=((EditText)findViewById(R.id.username)).getText().toString();
password=((EditText)findViewById(R.id.password)).getText().toString();

Useruser=newUser();
user.setUsername(username);
user.setPassword(password);
LoginProtocollogin=newLoginProtocol();
booleanresult=login.checkLogin(user);

if(result){ SpiderCache.getInstance().setUserSession(user);
Toast.makeText(getApplicationContext(),"登錄成功",1000).show();
Intentintent=newIntent();
intent.setClass(LoginActivity.this,WelcomeActivity.class);
startActivity(intent);
}else{ Toast.makeText(LoginActivity.this,"密碼或用戶名不匹配,請重新輸入!",1000).show();
}
}
以上代碼為了跟大家分享一下,感覺手機端和伺服器雙向開發非常過癮。同時對Android的興趣大大提升,它也沒有我們想像中的那麼難。

Ⅸ android protofield 是什麼來的

ProtocolBuffers的是一個高效且可擴展的格式結構化數據編碼的一種方式。 谷歌使用了ProtocolBuffers的幾乎所有它的內部RPC協議和文件格式 使用protobuf傳輸的好處有:二進制傳輸,安全、數據量小 .proto文件中我們伺服器定義需要傳輸的數據,及數....

Ⅹ 如何對 protobuf-lite編程,c++ android

protocol buffer編譯器生成 Foo 類,公開地(publicly)派生自 google::protobuf::Message。Foo類是一個實體類;禁止遺留下純虛的方法沒有被實現。除了 Message 中的虛方法之外,非純虛的方法可以由 Foo 類重載也可以不重載,取決於優化模式。預設,為了最高的速度, Foo 實現特定protocol buffer版本的所有方法。不管怎樣,如果 .proto 文件包含下列行:
1 option optimize_for = CODE_SIZE;

Foo 將僅重載運行必需的最小方法集合,和依賴於基於反射實現的剩餘部分。這意味著減小了生成代碼的大小,但也減小了性能。或者,如果 .proto 文件包含:
1 option optimize_for = LITE_RUNTIME;

Foo 將包含所有方法的快速實現(fast implementations),但是是實現 google::protobuf::MessageLite 介面,僅包含 Message 中所有方法的一個子集。尤其,它不支持描述符(descriptors)或反射。不管怎樣,以這種方式生成的代碼只需要連接 libprotobuf-lite.so (Windows上是 libprotobuf-lite.lib) 而不是 libprotobuf.so(libprotobuf.lib)。"lite"庫比 "full"庫(完整的庫)要小很多,更適用於資源受限的系統,比如手機。
你不應該創建 Foo 的子類。如果你子類化 Foo ,並且重載虛方法,重載可能被忽略,就像很多生成的方法為了提高性能被去虛擬化(de-virtualized)。

熱點內容
安卓按鍵大師怎麼用 發布:2025-05-15 01:54:12 瀏覽:686
手機ea伺服器連不上怎麼辦 發布:2025-05-15 01:35:03 瀏覽:450
資料庫數據插入語句 發布:2025-05-15 01:30:01 瀏覽:871
js是無需編譯直接運行嗎 發布:2025-05-15 01:28:30 瀏覽:476
android文件夾重命名 發布:2025-05-15 01:13:50 瀏覽:481
cns腳本 發布:2025-05-15 01:13:38 瀏覽:722
數據結構與演算法筆試題 發布:2025-05-15 01:04:20 瀏覽:417
搜狗輸入法如何直接編輯配置文件 發布:2025-05-15 00:51:47 瀏覽:668
電箱都有哪些配置 發布:2025-05-15 00:30:21 瀏覽:74
安卓qq邀請碼在哪裡尋找 發布:2025-05-15 00:02:04 瀏覽:35