原文出處:https://www.phodal.com/blog/bare-minimum-iot-system-android-example/
加上之前的部分,我們算是把開源的地方做了一個遍,因為Windows Phone需要在Windows 8上開發(fā)的原因,加上我沒有Macbook以及iPhone,所以在這里只會有一個Android的示例。當(dāng)然,原因上也是一樣的,相信這些也不會很難。
原理上和Raspberry PI的原理很像,也就是GET數(shù)據(jù),然后解析,也和服務(wù)端差不多。當(dāng)然在最開始的代碼里有撥打電話、發(fā)短信等等功能,只是我們似著簡化系統(tǒng)為我們想要的理想化模型。
源碼地址Home-Anywhere
寫在這里的原因是,因為我也不太擅長,所以也給不了多少指導(dǎo)。只是我試著去寫過這樣一個程序,有了幾個版本,所以算是知道怎樣去開發(fā),但是相比較于專業(yè)于我的人還是有很多不足,所以希望懂得的人給些建議和意見。
我們需要的庫和在Raspberry PI上的類似,如果你不需要的話,可以看看之前的文章:
最小物聯(lián)網(wǎng)系統(tǒng)(七)——與服務(wù)器通訊
因為CSDN上發(fā)這些文章已經(jīng)沒有足夠的必要,在之前的部分文章實在上是針對這部分寫的, 只是在自己的博客上梳理了一遍。
我們還要做的事情就是有一個RESTful的庫,以及解析JSON用的。
于是就有了下面兩個
這個類的原文在calling-web-services-in-android-using-httpclient,專門用于REST用的,如果熟悉的人我想一看就知道了。
這個庫來自于Google,一個不錯的庫。
所以我們就構(gòu)成了開發(fā)所需的兩部分基礎(chǔ)。
關(guān)于Android開發(fā)環(huán)境的配置這個網(wǎng)上有,最簡單的辦法是直接下載一個Android Studio。
下面只是列舉一些代碼以及可能會遇到的問題。
如在源碼里看到的那樣,
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.*可以不需要。
會產(chǎn)生下面這些代碼的原因是下載下來的JSON數(shù)據(jù)是類似于二維數(shù)組,所以需要轉(zhuǎn)換,下面的代碼有些丑陋,但是可能工作得很好。
JSONArray jArray = new JSONArray(client.getResponse());
JSONObject jObj=jArray.getJSONObject(0);
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ù)雜化了,直接放在原文里可能會好一點,不過造成這種錯覺的主要原因可能是受JAVA語言的影響,不過從軟件工程的某些角度上來說,這樣應(yīng)該會好一點。 其他的:
整理完閉。
如果你需要POST,又懶得去看原文,那么POST代碼在下面,只是因為我暫時沒有時間去研究Android里面的這些,以及怎樣繼續(xù)這個項目,因為最小的話,似乎已經(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());
}
大致上是類似的,注意一下都是字符就行了。
更多建議: