2016年6月29日 星期三

Android 元件 (Google App Engine) 建置雲端跟App互動(二)

Google App Engine(二)

上一篇: Android 元件 (Google App Engine) 建置雲端跟App互動(一)

本章運用到了:

MVC設計模式
Adapter接配線模式
BaseAdapter
ListView的 ViewHolider概念

本章目的:
1.在資料庫中 建立『資料表』,查詢『資料表』
2.『查詢』功能 下一篇 Google App Engine(三)
3.『新增』、『刪除』、『變更』功能 完全互動 下一篇Google App Engine(四)

GAE (AddServlet)

目的:在資料庫中建立資料表
位置:後台建立 (app中 第三篇再提到)


Step1:新增Libraries

(A) 將jar檔 添加到App_cloud_backend,libs的資料夾
載點:點我下載JDK ,或Google下載


(B) 將jar檔 添加道專案中






(C) 添加成功,到App_cloud_backend,build中 會成功顯示下圖↓




Step2:建立AddServlet的Class(App_cloud_backend)

(A) 用途目的:新增資料

註冊

name=  類別名稱
class= 類別存放詳細的位置
url-pattent= 在url中需要輸入什麼找到他,很重要!! (因為每一個類 都有自己所對應的)
Myservlet 對應的是→ /hello
Addservlet 對應的是→ /add
Queryservlet 對應的是→ /query (待會)




(B) 開始撰寫AddServlet程式碼
JAVA:AddServlet
package com.example.myapplication.backend;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import java.io.IOException;
import java.util.Date;
import java.util.Random;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AddServlet extends HttpServlet {
   @Override
   public void doGet(HttpServletRequest req, HttpServletResponse resp)
           throws IOException {

       resp.setContentType("text/plain");

       //使用工廠獲取 DatastoreService
       DatastoreService ds = DatastoreServiceFactory.getDatastoreService();

       //創建一個資料表 name= book
       Entity book = new Entity("Book");

       //資料表 放入資料
       book.setProperty("title", "android");
       book.setProperty("author", "Vincent");
       book.setProperty("price", new Random().nextInt(500) + 500);
       book.setProperty("time", new Date().getDate());

       //放入資料表
       //DatastoreService對象並調用put方法寫入數據 
       ds.put(book);
      
       //有點類似 JAVA的System.out.print("") 打印出訊息
       resp.getWriter().println("add ok");
   }
}


(C) 先執行模擬器,完成後再Build。




(D)Build,訊息出現Successfully代表成功
注意每一個專案後面的數字都是專屬且隨機賦予的
因為google提供的免費試用是有額度限制的,
所以一旦超出額度限制就會產生錯誤, 請務必用自己產生的可避免錯誤

(E) 到網路上確認是否沒問題,注意:網址後面要改成 /add
可以看出剛剛java撰寫打印出訊息 resp.getWriter().println("add ok");

補充:為什麼網址要改成 /add ? 因為註冊的是/add




Step3:找尋資料表

(A) 增加了資料,我們就會問說,那資料在哪裡呢?? 首先進到 Google Cloud Platform
(B) 我們會發現,重新整理一次網頁,Book資料表中的資料就會多新增一筆
(為了方便觀察,我們開啟兩個網頁觀察)








GAE (QueryServlet)

目的:查詢˙資料表
位置:後台建立 (app中 第三篇再提到)


Step1:建立QueryServlet的Class(App_cloud_backend)

(A) 用途目的:新增資料


(B) 文法賞析
(C) 撰寫程式
JAVA:QueryServlet
package com.example.myapplication.backend;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Query;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class QueryServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        resp.setContentType("text/plain");

        DatastoreService ds = DatastoreServiceFactory.getDatastoreService();

        //查詢 資料表
        Query q = new Query("Book");

        for (Entity book : ds.prepare(q).asIterable()){
            resp.getWriter().println(book);
        }
    }
}


(D)到web.xml註冊,執行模擬器→Bulid一次→查看網頁是否成功(注意網址最後為 /query)
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">


  <!--定義servlet的name、servlet的class-->
  <servlet>
      <servlet-name>MyServlet</servlet-name>
      <servlet-class>com.example.myapplication.backend.MyServlet</servlet-class>
  </servlet>


  <!--mapping=外界要透過哪一個url讀取,所以一般來說我們都會在網址後方+ "/hello"-->


  <servlet-mapping>
      <servlet-name>MyServlet</servlet-name>
      <url-pattern>/hello</url-pattern>
  </servlet-mapping>


  <!--手動建立一個AddServlet-->
  <servlet>
      <servlet-name>AddServlet</servlet-name>
      <servlet-class>com.example.myapplication.backend.AddServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>AddServlet</servlet-name>
      <url-pattern>/add</url-pattern>
  </servlet-mapping>


<!--手動建立一個QueryServlet-->
  <servlet>
      <servlet-name>QueryServlet</servlet-name>
      <servlet-class>com.example.myapplication.backend.QueryServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>QueryServlet</servlet-name>
      <url-pattern>/query</url-pattern>
  </servlet-mapping>


  <!--<welcome-file-list>-->
  <!--沒有用到,我們就可以先刪除了-->
      <!--<welcome-file>index.html</welcome-file>-->
  <!--</welcome-file-list>-->


</web-app>




沒有留言:

張貼留言