(九)——Android客戶端

2018-02-24 15:43 更新

原文出處:https://www.phodal.com/blog/bare-minimum-iot-system-android-example/

加上之前的部分,我們算是把開源的地方做了一個(gè)遍,因?yàn)閃indows Phone需要在Windows 8上開發(fā)的原因,加上我沒(méi)有Macbook以及iPhone,所以在這里只會(huì)有一個(gè)Android的示例。當(dāng)然,原因上也是一樣的,相信這些也不會(huì)很難。

原理上和Raspberry PI的原理很像,也就是GET數(shù)據(jù),然后解析,也和服務(wù)端差不多。當(dāng)然在最開始的代碼里有撥打電話、發(fā)短信等等功能,只是我們似著簡(jiǎn)化系統(tǒng)為我們想要的理想化模型。

源碼地址Home-Anywhere

Android開發(fā)

寫在這里的原因是,因?yàn)槲乙膊惶瞄L(zhǎng),所以也給不了多少指導(dǎo)。只是我試著去寫過(guò)這樣一個(gè)程序,有了幾個(gè)版本,所以算是知道怎樣去開發(fā),但是相比較于專業(yè)于我的人還是有很多不足,所以希望懂得的人給些建議和意見。

淺析

我們需要的庫(kù)和在Raspberry PI上的類似,如果你不需要的話,可以看看之前的文章:

最小物聯(lián)網(wǎng)系統(tǒng)(七)——與服務(wù)器通訊

因?yàn)镃SDN上發(fā)這些文章已經(jīng)沒(méi)有足夠的必要,在之前的部分文章實(shí)在上是針對(duì)這部分寫的, 只是在自己的博客上梳理了一遍。

我們還要做的事情就是有一個(gè)RESTful的庫(kù),以及解析JSON用的。

于是就有了下面兩個(gè)

RESTclient

這個(gè)類的原文在calling-web-services-in-android-using-httpclient,專門用于REST用的,如果熟悉的人我想一看就知道了。

GSON

這個(gè)庫(kù)來(lái)自于Google,一個(gè)不錯(cuò)的庫(kù)。

所以我們就構(gòu)成了開發(fā)所需的兩部分基礎(chǔ)。

Android

關(guān)于Android開發(fā)環(huán)境的配置這個(gè)網(wǎng)上有,最簡(jiǎn)單的辦法是直接下載一個(gè)Android Studio。

下面只是列舉一些代碼以及可能會(huì)遇到的問(wèn)題。

Android 4.0 Web問(wèn)題

如在源碼里看到的那樣,

        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads()
                .detectDiskWrites()
                .detectNetwork()   // or .detectAll() for all detectable problems
                .penaltyLog()
                .build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects()
                .detectLeakedClosableObjects()
                .penaltyLog()
                .penaltyDeath()
                .build());

這部分用于Android 4.0的網(wǎng)絡(luò),2.*可以不需要。

JSONObject 以及 JSONArray

會(huì)產(chǎn)生下面這些代碼的原因是下載下來(lái)的JSON數(shù)據(jù)是類似于二維數(shù)組,所以需要轉(zhuǎn)換,下面的代碼有些丑陋,但是可能工作得很好。

   JSONArray jArray = new JSONArray(client.getResponse());
        JSONObject jObj=jArray.getJSONObject(0);

handlerData的由來(lái)

    public GsonBuilder gsonb = new GsonBuilder();
    public Gson gson = gsonb.create();
    typePhoData phoData;
    public handlerData(JSONObject jObj){
        phoData = gson.fromJson(jObj.toString(),
                typePhoData.class);
    }
    public int get_id(){
        return phoData.id;
    }
    public double get_sensors1(){
        return phoData.sensors1;
    }
    public double get_sensors2(){
        return phoData.sensors2;
    }
    public double get_temperature(){
        return phoData.temperature;
    }
    public int get_led1(){
        return phoData.led1;
    }
    public class typePhoData{
        public int led1;
        public double temperature;
        public double sensors1;
        public double sensors2;
        public int    id;
    }

在某些程度上,我好像將這些代碼給復(fù)雜化了,直接放在原文里可能會(huì)好一點(diǎn),不過(guò)造成這種錯(cuò)覺(jué)的主要原因可能是受JAVA語(yǔ)言的影響,不過(guò)從軟件工程的某些角度上來(lái)說(shuō),這樣應(yīng)該會(huì)好一點(diǎn)。 其他的:

  • typePhoData的命名可能有些不盡人意,但是暫時(shí)沒(méi)有想到一個(gè)合適的
  • 用過(guò)幾天Ruby后,似乎這個(gè)不算是一個(gè)問(wèn)題
  • 如果你要修改的話,相信這個(gè)接口也不難,也許比原來(lái)的簡(jiǎn)單,前提是你看過(guò)原來(lái)的代碼。

整理完閉。

REST POST

如果你需要POST,又懶得去看原文,那么POST代碼在下面,只是因?yàn)槲視簳r(shí)沒(méi)有時(shí)間去研究Android里面的這些,以及怎樣繼續(xù)這個(gè)項(xiàng)目,因?yàn)樽钚〉脑挘坪跻呀?jīng)不再需要添加任何東西了。

RestClient clientPost = new RestClient(url);
                clientPost.AddParam("temperature", "23.1");
                clientPost.AddParam("led", "true");
                clientPost.AddParam("title", "from android");
                clientPost.AddParam("more", "nEW tESET");
                try {
                        clientPost.Execute(RequestMethod.POST);
                        if(client.getResponseCode()!=200){
                                vshow.setText(clientPost.getErrorMessage());
                        }
                        String response2 = clientPost.getResponse();
                        vshow.setText(response2.toString());
                } catch (Exception e) {
                        vshow.setText(e.toString());
                }

大致上是類似的,注意一下都是字符就行了。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)