1. 程式人生 > >Android程式與伺服器互動(一)

Android程式與伺服器互動(一)

在公司一個專案中用到了這樣一種網路請求方式,在此記錄學習。

1.java程式碼

    /**
     * 訪問網路改變座位號
     */
    private void saveSeatNumber() {
        Controller.getInstance(this).saveSeatNumber(
                getIntent().getStringExtra("prescriptionGroupNum"),
                seatNumberContent.getText().toString().trim(),
                new
HandlerMessage() { @Override public void handlerMessage(String result) { if (result.equals("1")) { } else if (result.equals("2")) { Toast.makeText(InfusionSeatNumberActivity.this, "儲存失敗"
, Toast.LENGTH_LONG).show(); } else { Toast.makeText(InfusionSeatNumberActivity.this, "未知錯誤", Toast.LENGTH_LONG).show(); } } }); }

2.Controller.java

public class Controller {
    private MySQLiteOpenHelper myOpenHelper;
    private AsyncTask task;
    private static Controller instance;
    private static Context context;

    public static Controller getInstance(Context c) {
        if (instance == null) {
            instance = new Controller();
        }
        context = c;
        return instance;
    }

    public void cancelTask(boolean cancel) {
        if (task != null) {
            task.cancel(cancel);
        }
    }
    /**
     * 儲存座位號
     * 
     * @param prescriptionGroupNum
     * @param zw
     */
    public void saveSeatNumber(final String prescriptionGroupNum,
            final String zw, final HandlerMessage handlerMsg) {
        AsyncTask<Object, Integer, String> asyncTask = new AsyncTask<Object, Integer, String>() {
            ProgressDialog pd;

            @Override
            protected void onPreExecute() {
                pd = new ProgressDialog(context,
                        ProgressDialog.STYLE_HORIZONTAL);
                pd.setMessage(context.getString(R.string.pleasewait));
                pd.setCancelable(false);
                pd.show();
            }

            @Override
            protected String doInBackground(Object... objects) {
                return ServerDataUtil.getInstance().saveSeatNumber(
                        prescriptionGroupNum, zw);
            }

            @Override
            protected void onPostExecute(String result) {
                if (result != null) {
                    handlerMsg.handlerMessage(result);
                }
                pd.dismiss();
            }
        };
        asyncTask.execute("");
    }
}

3.ServerDataUtil.java

public class ServerDataUtil {
    private final static int TIMEOUT = 30000;
    public final static String CONEXCEPTION = "網路異常,請重新操作";
    private HttpPost req;
    private HttpResponse rep;
    private static DefaultHttpClient client;
    private List<NameValuePair> params;
    private static ServerDataUtil fetcher;

    public static ServerDataUtil getInstance() {
        if (fetcher == null) {
            fetcher = new ServerDataUtil();
        }
        if (client == null) {
            BasicHttpParams params = new BasicHttpParams();
            SchemeRegistry schemeRegistry = new SchemeRegistry();
            schemeRegistry.register(new Scheme("http", PlainSocketFactory
                    .getSocketFactory(), 80));
            final SSLSocketFactory sslSocketFactory = SSLSocketFactory
                    .getSocketFactory();
            schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));
            ClientConnectionManager cm = new ThreadSafeClientConnManager(
                    params, schemeRegistry);
            client = new DefaultHttpClient(cm, params);
            final HttpParams param = client.getParams();
            HttpConnectionParams.setConnectionTimeout(param, TIMEOUT);
            HttpConnectionParams.setSoTimeout(param, TIMEOUT);
            ConnManagerParams.setTimeout(param, TIMEOUT);
        }
        return fetcher;
    }
    /**
     * 儲存座位號
     * 
     * @return
     */
    public String saveSeatNumber(String prescriptionGroupNum, String zw) {
        params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("prescriptionGroupNum",
                prescriptionGroupNum));
        params.add(new BasicNameValuePair("zw", zw));
        try {
            req = new HttpPost(ClientStrings.getBASE_URL()
                    + ClientStrings.SAVE_SEAT_NUMBER);
            HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
            req.setHeader(entity.getContentType());
            req.setEntity(entity);
            rep = client.execute(req);
            if (rep.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                return EntityUtils.toString(rep.getEntity());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Static.netexception;
    }

4.HandlerMessage.java

/**
 * 非同步返回值
 * 
 * @author Administrator
 * 
 */
public interface HandlerMessage {
    public void handlerMessage(String result);
}

相關推薦

Android程式伺服器互動

在公司一個專案中用到了這樣一種網路請求方式,在此記錄學習。 1.java程式碼 /** * 訪問網路改變座位號 */ private void saveSeatNumber() { Controller.g

Android 建立解析XML—— 概述

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android 建立解析XML---- SAX方式

 @Override  public String serialize(List<Book> books) throws Exception {   SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory

RN原生互動——基本頁面跳轉

React Native(以下簡稱RN)開發app過程中大部分都可以在JS端完成,但是也有一些功能是需要原生端來完成的。這時RN與原生端就不可避免的需要進行互動,比如頁面跳轉和資料傳遞。本篇文章主要以RN——原生、原生——RN——原生為例來講解如何進行基本的頁面跳轉操作。關於頁面跳轉,我寫了三個demo。這裡

AndroidJS之間的互相呼叫互動

Android裝置多解析度的問題Android瀏覽器預設預覽模式瀏覽 會縮小頁面 WebView中則會以原始大小顯示Android瀏覽器和WebView預設為mdpi。hdpi相當於mdpi的1.5倍 ldpi相當於0.75倍三種解決方式:1 viewport屬性 2 CS

總想自己動動手系列·1·本地和外網Liunx伺服器上部署的web專案按照自定義的報文格式進行互動

一、準備工作 (1)有一臺屬於自己的雲伺服器,併成功部署和釋出一個web專案(當然,本質上來說Java-Project也沒問題),通過外網IP可以正常訪問該web專案。   需要說明的是:任何web專案,只要成功部署後在外網上能訪問到即可。本案例注重修改web對請求的監聽和過濾的處

伺服器安全性的執行維護 理論

提前檢查 伺服器和網站漏洞檢測,對Web漏洞、弱口令、潛在的惡意行為、違法資訊等進行定期掃描。程式碼的定期檢查,安全檢查,漏洞檢查。伺服器安全加固,安全基線設定,安全基線檢查。資料庫執行的命令,新增欄位、加索引等,必須是經過測試檢查的命令,才能在正式環境執行。  資料備份 伺服器資料備份,包括

Qt之遊戲手柄的互動

用途 通過手柄與Qt的通訊,傳送指令至遠端裝置,控制遠端裝置的運動。 手柄種類 市面上的遊戲手柄也有多種種類,主流的是藍芽手柄、2.4g手柄和usb手柄。2.4g手柄有的會識別出來是Xbox裝置,有的識

Android 創建解析XML—— 概述

四種 stream 大小 ora rda roc default 關系 建立 Android 是最常用的智能手機平臺,XML 是數據交換的標準媒介,Android 中可以使用標準的XML生成器、解析器、轉換器 API,對 XML 進行解析和轉換。 XML,相關有DOM

Android開發常見異常錯誤系列

一、前言 這系列文章是自己在平時開發過程中遇到的問題。之前只是記在雲筆記上面,現在整理一下,發出來共享。 ps:像那些什麼沒有註冊Activity呀,許可權呀等最基本的就不再贅述。 二、ADB連線異常 有時我們發現,即使自己從工作管理員裡面把adb.ex

Android Rom定製修改學習

最近ZUK慘遭聯想拋棄,從而使得ZUK系列全線大降價,於是將服役了三年的榮耀6換下了,入手ZUK2 PRO,機器在硬體方面都挺讓人滿意,只是聯想採用了一塊AMOLED屏,相比較於IPS而言,A屏顏色實在過於飽和,外加ZUK自帶ZUI也可能不再更新,於是便萌生了在

Android自定義View總結基礎知識例項

自定義View是最能體現一個Android開發者水平的技能之一了。 接下來的一些列部落格將總結一下Android的自定義相關View知識,包括View的結構,事件體系,工作原理,自定義View的繪製等。 參考資料部分來自於書上以及各種部落格。 新建了一個qq群 482

微信小程式填坑之路之springmvc程式的資料互動json

springmvc框架寫到現在終於牽扯到小程式了(所以別說我“不務正業”),對於一個應用程式來說,它的本質其實就是無數個對資料進行增刪改查的操作,這裡起到至關重要的就是資料,於是這篇帖子的目的就是實現小程式與後臺資料的互動。小程式使用的是wx.request的api來提交和接

Android-PickerView系列之介紹使用篇

宣告:本文為博主原創文章,轉載請註明出處:小嵩的部落格 一、介紹 Android-PickerView是一款仿iOS的PickerView控制元件,並封裝了時間選擇和選項選擇這兩種選擇器,詳細特性如下: WheelView —— 基礎控制元件

Native和html5的互動h5傳資料or觸發一個Android的事件

實習的時候給了一個native 與htmlt5的互動的任務 那Android平臺來舉例 Activity.java裡面 WebView mWebView; @SuppressLint({ "JavascriptInterface", "SetJavaScriptEnab

android studio建立第一個安卓程式載入html5頁面

前言 軟體版本:android studio v1.0正式版,由於v0.x以來軟體變化一直比較大,很多問題搜尋的解決方案也都是v0.x版本時代的,故首先宣告一下版本。 動機:由於工作中需要對移動端軟體開發的幾種方式進行一下對比研究,故有了此文章的產生,估計後續還會有其他技

Androidjs互動自定義cordova外掛

首先昨天我做測試的時候js端一直無法呼叫寫在js的方法後來查了資料才知道是在index.html中使用js時 需要刪除這一行 <meta http-equiv="Content-Security-Policy" content="default-src 'self'

Android高階進階——繪圖篇Canvas 圖層

開篇 前面很多篇文章都用到了圖層的概念,但是一直沒有詳細介紹,今天這篇文章將詳細的介紹 Canvas 與 圖層的概念 一、如何獲得一個Canvas物件 方法一:自定義view時, 重寫onDraw、dispatchDraw方法 protect

Android百度地圖開發:地圖下載配置

轉載請標明出處 弄了不久,也算是入門百度地圖的開發了,基本的實現並不難,接下來說下基本步驟: 1:註冊百度賬號並進入官網:http://lbsyun.baidu.com/index.php?title=androidsdk,按提示完成基本驗證就可進入如下頁

android studio建立第一個安卓程式載入html5頁面

前言 軟體版本:android studio v1.0正式版,由於v0.x以來軟體變化一直比較大,很多問題搜尋的解決方案也都是v0.x版本時代的,故首先宣告一下版本。 動機:由於工作中需要對移動端軟體開發的幾種方式進行一下對比研究,故有了此文章的產生,估計後續還會有其他技