當前位置:首頁 » 安卓系統 » android與伺服器端數據交互

android與伺服器端數據交互

發布時間: 2022-08-23 04:26:00

1. android與伺服器交互用post好還是get

要根據實際應用的需求和數據量。
HTTP 定義了與伺服器交互的不同方法,最基本的方法是 GET 和 POST。
事實上 GET 適用於多數請求,而保留 POST 僅用於更新站點。根據 HTTP 規范,GET 用於信息獲取,而且應該是 安全的和 冪等的。所謂安全的意味著該操作用於獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。冪等的意味著對同一 URL 的多個請求應該返回同樣的結果。完整的定義並不像看起來那樣嚴格。從根本上講,其目標是當用戶打開一個鏈接時,它可以確信從自身的角度來看沒有改變資源。比如,新聞站點的頭版不斷更新。雖然第二次請求會返回不同的一批新聞,該操作仍然被認為是安全的和冪等的,因為它總是返回當前的新聞。反之亦然。
POST 請求就不那麼輕鬆了。POST 表示可能改變伺服器上的資源的請求。仍然以新聞站點為例,讀者對文章的註解應該通過 POST 請求實現,因為在註解提交之後站點已經不同了(比方說文章下面出現一條註解);
在FORM提交的時候,如果不指定Method,則默認為GET請求,Form中提交的數據將會附加在url之後,以?分開與url分開。字母數字字元原樣發送,但空格轉換為「+「號,其它符號轉換為%XX,其中XX為該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;
GET方式提交的數據最多隻能有1024位元組,而POST則沒有此限制。

2. android怎麼與伺服器交互

這個實例對新手來說只會更迷茫。給點思路:要明白android和伺服器交互的框架是怎麼樣的。最簡單的理解就是:介面,客戶端如何發起請求,伺服器怎麼樣處理收到的請求。首先要了解android客戶端怎麼樣才能和伺服器通訊。再自己學點伺服器開發的知識,做個最簡單的實例。 查看原帖>>

3. android平台的app 手機客戶端和後台伺服器怎麼進行數據交互的

首先不要管安卓端還是蘋果端,現在一般都是響應式的app,你放到安卓或者蘋果或者pc或者平板都是沒有問題的。一般採用的是http介面通訊,或者socket連接。具體你要去查資料找Demo了。而且現在主流是採用html5開發或者混合開發了。所以最好是伺服器提供appAPI介面,通過http訪問伺服器,獲取數據,數據一般是json,或者xml,拿到後解析數據就可以了,然後再用UI框架或者其他框架或者自定義的UI封裝下格式很漂亮了,至於cookie和session等,看你的習慣,網路驗證和簽名那些也自己看習慣,如果涉及到大數據,還需要引入第三方框架的,直接引入就可以了,不過推薦自己寫,防止侵權。都是很通用的。

4. android客戶端如何與後台java伺服器交互

1、java伺服器建立至少一種服務webservices、servlet、socket

2、客戶端通過socket或者httpurlconnection的方式進行連接訪問

服務端:
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
//TODOAuto-generatedmethodstub
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");


PrintWriterout=resp.getWriter();
//用HTML格式給瀏覽器返回數據
out.println("<html>");
out.println("<head>");
out.println("<title>TomcatServlet測試</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello,FirstServlet!");
out.println("</body>");
out.println("</html>");
out.println("Hello,第一個Tomcat!!!");
out.close();
}
客戶端:
privateStringdoGet(Stringurl){
StringresponseStr="";
try{
Stringname=nameEdit.getText().toString().trim();
Stringcode=codeEdit.getText().toString().trim();
StringgetUrl=URL+"?NAME="+name+"&"+"CODE="+code;

HttpGethttpRequest=newHttpGet(getUrl);
HttpParamsparams=newBasicHttpParams();
ConnManagerParams.setTimeout(params,1000);
HttpConnectionParams.setConnectionTimeout(params,3000);
HttpConnectionParams.setSoTimeout(params,5000);
httpRequest.setParams(params);

HttpResponsehttpResponse=newDefaultHttpClient().execute(httpRequest);
finalintret=httpResponse.getStatusLine().getStatusCode();
if(ret==HttpStatus.SC_OK){
responseStr=EntityUtils.toString(httpResponse.getEntity(),HTTP.UTF_8);
}else{
responseStr="-1";
}
}catch(ClientProtocolExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

returnresponseStr;
}

詳細的參見:http://blog.csdn.net/yanzi1225627/article/details/24882569

5. android客戶端怎麼與伺服器交互

1、java伺服器建立至少一種服務webservices、servlet、socket
2、客戶端通過socket或者httpurlconnection的方式進行連接訪問
服務端:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");

PrintWriter out = resp.getWriter();
//用HTML格式給瀏覽器返回數據
out.println("<html>");
out.println("<head>");
out.println("<title>Tomcat Servlet測試</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello,First Servlet!");
out.println("</body>");
out.println("</html>");
out.println("Hello,第一個Tomcat!!!");
out.close();
}
客戶端:
private String doGet(String url){
String responseStr = "";
try {
String name = nameEdit.getText().toString().trim();
String code = codeEdit.getText().toString().trim();
String getUrl = URL + "?NAME=" + name+"&"+"CODE=" + code;

HttpGet httpRequest = new HttpGet(getUrl);
HttpParams params = new BasicHttpParams();
ConnManagerParams.setTimeout(params, 1000);
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 5000);
httpRequest.setParams(params);

HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
final int ret = httpResponse.getStatusLine().getStatusCode();
if(ret == HttpStatus.SC_OK){
responseStr = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8);
}else{
responseStr = "-1";
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return responseStr;
}

6. 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的興趣大大提升,它也沒有我們想像中的那麼難。

7. android 能和網站服務端交互么

android客戶端和伺服器端是基於IntentService的,具體如下:

  1. 後台使用簡單的servlet,支持GET或POST。這個servlet最終返回給前台一個字元串flag,值是true或false,表示登錄是否成功。

  2. 然後在安卓的ADT上創建一個安卓項目,建立兩個Activity,分別作為登錄界面和登錄成功界面。

  3. HTTP的訪問公共類,用於處理GET和POST請求。

  4. IntentService服務,用於在後台以隊列方式處理耗時操作。

  5. 在AndroidManifest.xml中注冊IntentService。注意uses-permission節點,為程序開啟訪問網路的許可權。

  6. 登陸界面處理,注意按鈕監聽事件中,使用Intent將要傳遞的值傳給service。接收廣播類中,同樣使用Intent將要傳遞的值傳給下一個Activity。在onCreate()中,動態注冊接收廣播類的實例receiver。在接收廣播類中,不要使用完畢後忘記注銷接收器,否則會報一個Are you missing a call to unregisterReceiver()? 的異常。

8. android怎麼實現post方法與伺服器交互

public static String LoginOfPost(String username,String password){
HttpURLConnection conn=null;
try {
URL url=new URL("http://192.168.1.4:8080/AndroidServer/LoginServlet");
conn=(HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(10000);
conn.setReadTimeout(5000);
conn.setDoOutput(true);
//post請求的參數
String data="username="+username+"&password="+password;
OutputStream out=conn.getOutputStream();
out.write(data.getBytes());
out.flush();
out.close();

conn.connect();
int code=conn.getResponseCode();
if(code==200){
InputStream is=conn.getInputStream();
String state=getStringFromInputStream(is);
return state;
}

} catch (Exception e) {
e.printStackTrace();
}finally{
if(conn!=null){
conn.disconnect();
}
}

return null;
}

熱點內容
linux的路徑怎麼寫 發布:2025-01-15 17:18:49 瀏覽:183
php解壓程序 發布:2025-01-15 17:06:22 瀏覽:141
刷助力腳本 發布:2025-01-15 17:02:31 瀏覽:519
c盤里的用戶文件夾可以刪除 發布:2025-01-15 16:56:45 瀏覽:949
虛幻4編譯到哪裡 發布:2025-01-15 16:50:19 瀏覽:754
透明度漸變android 發布:2025-01-15 16:45:08 瀏覽:834
dos連接oracle資料庫 發布:2025-01-15 16:41:39 瀏覽:905
網路配置比較低怎麼做 發布:2025-01-15 16:35:38 瀏覽:361
android彈出鍵盤監聽 發布:2025-01-15 16:35:11 瀏覽:207
uz畫圖編程 發布:2025-01-15 16:32:44 瀏覽:883