1. 程式人生 > >Android 如何在Android專案中搭建HTTP伺服器

Android 如何在Android專案中搭建HTTP伺服器

前言

顧客在無人售貨機前購買商品,需要把選購的商品資訊上傳給Android應用並顯示在螢幕上,通訊協議為Http協議,無人售貨機將作為客戶端,Android應用作為服務端,通過http協議,將商品資訊上傳給Android應用並顯示,在這樣的場景下,就需要再Android應用程式中搭建一個Http伺服器,在Android應用程式中搭建伺服器不比java後臺那樣,那麼有什麼好的方式可以實現這樣的應用場景呢?現在是開源的世界,什麼樣的需求和功能,都能夠很容易找到解決方案,我們可以通過一個開源的伺服器框架來實現,它就是NanoHTTPD,NanoHTTPD是一個免費、輕量級的(只有一個Java檔案) HTTP伺服器,可以很好地嵌入到Java程式中。支援 GET, POST, PUT, HEAD 和 DELETE 請求,支援檔案上傳,佔用記憶體很小,如果要使用它的話,需要在官網下載原始碼,把相應的原始碼拷貝到自己的專案中,並繼承相應的類。

開始在Android專案中搭建Http伺服器

2、原始碼下載下來以後,將其拷貝在自己的專案中,下圖是我拷貝到專案中的目錄結構,僅供參考:
目錄結構

3、拷貝到自己專案中以後,建立一個新類,並繼承NanoHTTPD類,重寫serve()方法,注意建構函式不能少,在建立物件時,需要把埠傳給父類。

public class Http extends NanoHTTPD {

    private static final String TAG = "Http";
    public Http(int port) {
        super(port);
    }

    @Override
public Response serve(IHTTPSession session) { try { // 這一句話必須要寫,否則在獲取資料時,獲取不到資料 session.parseBody(new HashMap<String, String>()); } catch (IOException e) { e.printStackTrace(); } catch (ResponseException e) { e.printStackTrace(); } StringBuilder builder = new
StringBuilder(); Method method = session.getMethod(); String uri = session.getUri(); Map<String, String> parms = session.getParms(); String data = parms.get("data");//這裡的data是POST提交表單時key Log.i(TAG, "uri: "+uri);//如果有uri,會打印出uri Log.i(TAG, "data: "+data); builder.append("任意內容");// 反饋給呼叫者的資料 return newFixedLengthResponse(builder.toString()); }

4、在專案中新建一個Android服務,在該服務的onStartCommand()方法中建立剛才新建好的Http物件並呼叫它的方法start()方法開啟http服務,埠可任意指定(0~65535之間都可以)。

public class MyServer extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 建立物件,埠我這裡設定為8080
        HttpService myServer = new HttpService(8080);
        try {
            // 開啟HTTP服務
            myServer.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return super.onStartCommand(intent, flags, startId);
    }
}

5、啟動專案,通過http請求工具進行測試,前提是專案所在的裝置需要連線網路,測試地址是裝置上的IP地址加上埠,最後可以看到Android專案伺服器接收到了資料。

相關推薦

Android 如何在Android專案搭建HTTP伺服器

前言 顧客在無人售貨機前購買商品,需要把選購的商品資訊上傳給Android應用並顯示在螢幕上,通訊協議為Http協議,無人售貨機將作為客戶端,Android應用作為服務端,通過http協議,將商品資訊上傳給Android應用並顯示,在這樣的場景下,就需要

linux搭建HTTP伺服器

WEB的概念 web是一種互動式圖形式介面的Internet服務,有強大的資訊連線功能,通過超文字連結( HyperText ) 的 方式,將資訊通過 Internet 傳遞到全球每個角落!一般情況下,終端使用者通過瀏覽器輸入比較完整的URL即可以完成訪問。 HTTP服務原理 分為四個步驟:

Android Studio 3 搭建protobuf環境

  考慮Android專案中為提高傳輸速率、降低資料量以達到優化使用者體驗,就選擇了使用protobuf。那麼如何在專案中使用Android Studio 3 進行整合呢? 接下來讓我來帶你去看看如何搭建。 工具/原料 安卓手機 Android Studi

Android關於專案遇到的按home鍵退出到桌面,再次開啟重新啟動程式的解決方法

我的專案是使用高德地圖做交通類的,主要是Activity和Fragment之間的切換。 我遇到的問題是:我在執行打包後的apk時,進入程式後,無論在哪個介面按home鍵回到桌面,當再次開啟需要重新啟動而不是回到開啟之前的操作介面;而在程式碼除錯的時候不會出現這種問題。 解決方法:在網上搜了好

Android倒計時專案的應用

今天拿到UI圖,看到很多產品模組中涉及到倒計時,本想偷偷懶在網上copy一份原始碼,在覽閱中發現並不適合多個模組管理,最後決定親自擼起。 UI圖 原始碼中主要分為兩個類 CountdownManager類 * 倒計時管理器,所有需要倒計時的頁面

Android開發專案的build.gradle檔案介紹

在開發android專案中,我們通常會遇到兩個build.gradle檔案。如下圖所示: 一個用於整個專案,另一個用於app應用模組。應用於整個專案的內容很少,沒啥好解釋的,內容保持預設不變就行了。我們要了解和經常編輯的是app/build.grad

AndroidAndroid NDK專案C++檔案列印日誌

Android NDK專案中C++檔案中列印日誌 工作需要,在NDK專案中的C++檔案中列印日誌,還是費了點勁查詢 才達到自己 想要的效果了。 步驟 新增標頭檔案 新增標頭檔案 定義巨集函式 #include <android/log.h> //這2行可

Android Studio專案的Gradle檢視內容

Android Studio專案中的Gradle檢視內容 使用Android Studio的同學都知道,我們可以方便的在Gradle檢視中檢視專案中的Task, 雙擊Task就可以執行它。如下圖所示: 那麼檢視中的元素跟我們的專案都有什麼對應關係呢?請往下看。 Grad

Android studio專案的gradle.properties詳解

Android studio專案中的gradle.properties詳解 在使用Android Studio新建Android專案之後,在專案根目錄下會預設生成一個gradle.properties檔案,我們可以在裡面做一些Gradle檔案的全域性性的配置,也可以將比較私密的資訊放

Android Studio專案三種依賴的新增方式

通常一個AS專案中的依賴關係有三種,一是本地依賴(主要是對本地的jar包),二是模組依賴,三是遠端依賴;新增這些依賴的目的在於上我們想要在專案的某一個模組中使用其中的功能,比如okttp這個網路框架庫,如果我們想要在專案的app模組下使用這個庫的功能,則需要在app模組的build.gradle

android專案使用執行緒池

android 中除了更新UI的主執行緒以外,還需要處理業務邏輯的工作執行緒,所以需要我們構建執行緒池,對執行緒進行統一的管理. android中像訪問記憶體卡,聯網等耗較長的操作時,需要在一部執行緒中使用| 1.編寫一個android使用的執行緒工具類   package com.d

Android/Java專案重複引用jar包導致的錯誤

1.重複引用jar包會導致編譯不通過,報類重複定義的異常; 解決方法:刪除一個重複引用的jar包。 2.有時候jar包名稱不同,但jar包裡面包含了相同的類,也算是重複定義; 解決方法:用解壓縮工具開啟後找到相應的類,刪除即可。

Android專案資料夾和檔案的作用

Table of Contents 資料夾的作用  檔案的作用    資料夾的作用  No. 資料夾 描述 1 src 存放

Android studio專案使用JNI呼叫opencv的c++程式

前言 opencv雖然有java版本,但是對於輪廓,點等資料結構和c++版本不一樣,這給移植帶來了大量的工作量。好在java有JNI(Java Native Interface)可以呼叫c++函式。 本文主要介紹如何在安卓手機APP專案中呼叫用c++寫的通過op

Android專案引入另一個專案作為依賴(引入Module)

文件背景介紹 最近寫一個專案引用了一個第三方庫,MPAndroidChart,要求做一個柱形圖,且點選和未點選呈現兩種顏色,經查詢發現,該庫無法直接設定選中後柱的顏色,只能嘗試修改原始碼,但是由於該庫為直接在gradle中匯入的,程式碼上鎖無法修改,因此該文

Android學習 (十七) 把GSON庫新增Android studio專案

在用GSON解析JSON的時候,會用到GSON,GSON 是google解析JSON的一個開源框架。 1)下載得到資源包: 2)把資源包放在專案的libs資料夾下面。 3)在app資料夾上右鍵,選擇Open Module Settings 4)選

android商業專案,Debug的使用技巧

經驗之談 android開發中,與其說在處理邏輯,倒不如說在處理資料。資料從哪來,到哪去,如何分流,如何觀察資料完整性和合法性,如何進行資料的生產和消費,這都是很敏感的東西。高效的開發方式,我認為應該是這個樣子的(拋開UI層面): 首先,資

android MVP + dagger2 + Retrofit + Rxjava+okhttp android基礎專案框架搭建(2)--之MVP引入

上一篇文章中,我們已經成功的引入了Dagger2;今天我們將繼續使用android MVP模式對程式碼進行實現。#1 將MainActivity.java檔案移動到ui包下,並在ui包下建立view包; view包下存放介面。包及類結構如圖  2 新建presenter包,

基於libevent框架搭建http伺服器

#include <stdlib.h> #include <stdio.h> #include <string.h> //libevent http server header files #include <event2/http.h> #in

怎樣在Win7系統搭建Web伺服器,並在區域網訪問

第一步:開啟控制面板 第二步:進入<程式> 第三步:開啟或關閉windows功能 第四步:點選展開Internet資訊服務,全部都選中 第五步:關閉防火牆,並開啟全球資訊網服務(http)