日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android客戶端與PHP服務端通信(二)

Android客戶端與PHP服務端通信(二)

來源:程序員人生   發布時間:2015-06-06 08:29:29 閱讀次數:2730次

概述

    本節通過1個簡單的demo程序簡單的介紹Android客戶端通過JSON向PHP服務端提交定單,PHP服務端處理定單后,通過JSON返回結果給Android客戶端。正常來說,PHP服務端在處理定單進程中,需要與MySQL數據庫交互,這里為了簡單起見,暫時省掉MySQL。

通訊格式

首先,需要定下客戶端與服務端之間通訊格式,以下表


Android客戶端

    客戶端與服務端采取JSON數據格式通訊,同時采取HTTP通訊協議交互,采取POST方式提交結果。同時還要注意1點,與WEB服務器通訊的進程需要另開辟1個線程進行數據的獲得,這樣可以避免獲得程序失敗以后,主線程還可以運行,我開始實驗的時候沒有注意到這1點,由于通訊失敗造成了程序停止運行。

    同時由于需要網絡通訊,所以需要在AndroidManifest.xml中添加以下權限語句


<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    程序的構造圖比較簡單,只有1個MainActivity.java。


    運行效果為


MainActivity.java內容以下

package com.lygk.jsontest; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.protocol.HTTP; import org.json.JSONObject; import com.example.jsontest.R; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG="LYGK"; Button BtnRequest; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i(TAG, "啟動程序 "); BtnRequest = (Button)findViewById(R.id.BtnRequest); //綁定事件源和監聽器對象 BtnRequest.setOnClickListener(new ButtonRequestListener()); } //內部類,實現OnClickListener接口 //作為第2個按鈕的監聽器類 class ButtonRequestListener implements OnClickListener { public void onClick(View v) { Log.i(TAG, "按鈕按下 "); StartRequestFromPHP(); Log.i(TAG, "履行終了 "); } } private void StartRequestFromPHP() { //新建線程 new Thread(){ public void run(){ try { SendRequest(); } catch (Exception e) { e.printStackTrace(); } } }.start(); } private void SendRequest(){ //通過HttpClient類與WEB服務器交互 HttpClient httpClient = new DefaultHttpClient(); //定義與服務器交互的地址 String ServerUrl = "http://www.bigbearking.com/study/guestRequest.php"; //設置讀取超時,注意CONNECTION_TIMEOUT和SO_TIMEOUT的區分 httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000); //設置讀取超時 httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000); //POST方式 HttpPost httpRequst = new HttpPost(ServerUrl); //準備傳輸的數據 List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); params.add(new BasicNameValuePair("CMDID", "1")); params.add(new BasicNameValuePair("CUserName", "lygk")); params.add(new BasicNameValuePair("COrderName", "Apple")); params.add(new BasicNameValuePair("COrderNum", "2")); try{ //發送要求 httpRequst.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); //得到響應 HttpResponse response = httpClient.execute(httpRequst); //返回值如果為200的話則證明成功的得到了數據 if(response.getStatusLine().getStatusCode() == 200) { StringBuilder builder = new StringBuilder(); //將得到的數據進行解析 BufferedReader buffer = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); //readLine()阻塞讀取 for(String s =buffer.readLine(); s!= null; s = buffer.readLine()) { builder.append(s); } System.out.println(builder.toString()); //得到Json對象 JSONObject jsonObject = new JSONObject(builder.toString()); //通過得到鍵值對的方式得到值 int CmdId = jsonObject.getInt("CMDID"); String SResult = jsonObject.getString("SResult"); String SUserName = jsonObject.getString("SUserName"); int SResultPara = jsonObject.getInt("SResultPara"); Log.i(TAG, "讀取到數據 "); Log.i(TAG, "RequestResult:"+SResult); Log.i(TAG, "UserName:"+SUserName); //在線程中判斷是不是得到成功從服務器得到數據 } else{ Log.e(TAG, "連接超時 "); } }catch (Exception e) { e.printStackTrace(); Log.e(TAG, "要求毛病 "); Log.e(TAG, e.getMessage()); } return ; } }


Web服務端源碼

guestRequest.php內容:

<?php //獲得客戶端發來的要求信息 $CmdId = $_POST['CMDID']; $UserName = $_POST['CUserName']; $OrderName = $_POST['COrderName']; if($UserName != 'lygk') { $result = 'Fail'; $resultpara = 2; //將數據存儲到數據中 $arr = array( 'CMDID' => $CmdId, 'SUserName' => $UserName, 'SResult'=>$result, 'SResultPara' =>$resultpara ); //將數組轉成json格式進行傳遞 $strr = json_encode($arr); } else { $result = 'Success'; $resultpara = 1; //將數據存儲到數據中 $arr = array( 'CMDID' => $CmdId, 'SUserName' => $UserName, 'SResult'=>$result, 'SResultPara' =>$resultpara ); //將數組轉成json格式進行傳遞 $strr = json_encode($arr); } echo($strr); ?>

    運行軟件,點擊“發送要求”按鈕后,從LogCat可以看到運行信息,WEB服務器已成功響應處理了Android客戶端發送的要求。


結尾

    本章主要介紹了Android客戶端與WEB服務真個交互,貼的源碼比較多,發現講的原理少,其中個中細節,請君自行品味查閱。Android客戶端源碼,點此下載

/*****************************************************************************************************

*原創文章,轉載請注明網址:http://blog.csdn.net/mybelief321/article/details/45423143

*魯陽高科工作室

*網       址:www.bigbearking.com

*商務合作QQ:1519190237

*業 務 范 圍:網站建設、桌面軟件開發、AndroidIOS開發、圖象影視后期處理、PCB設計

****************************************************************************************************/


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 天天干91 | 国产成人精品一区二区三区网站观看 | 亚洲精品电影在线 | 激情欧美日韩一区二区 | 亚洲国产成人精品女人久久久 | 欧美成视频 | 国产视频一区在线观看 | 成人性生交大片免费观看嘿嘿视频 | 99久久久久国产精品免费 | 精品成人在线视频 | 欧美淫视频 | 久久99精品视频 | 久久99999 | 免费观看一区 | 欧美一区二区免费 | 中文字幕av免费 | 日韩在线播放视频 | 亚洲精品久久久久久久久久久 | 国产一区二区免费看 | 精品久久久一区 | 日韩欧美高清在线 | 在线一区视频 | 国产精品日韩在线观看 | 久久久亚洲国产精品麻豆综合天堂 | 2020国产精品 | 高清国产一区二区 | 黄网在线看 | 在线黄av| 成人免费在线播放 | 国产乱码一区二区三区 | 成人免费黄网站 | 欧美午夜精品久久久久免费视 | 色综合久久久久 | 91嫩草在线| 国产欧美日韩综合精品 | 久久精品99国产精品 | 国产视频亚洲 | 亚洲一区成人 | 久久精品2019中文字幕 | 在线免费a视频 | 亚洲精品在线免费 |