libro
www.tuyano.com
App InventorによるAndroid開発入門

WebコンポーネントとGAEで本格データベース・アプリ (3/7)

作成:2013-07-20 10:43
更新:2013-07-20 10:43

■Google App Engineでサービスを作る

では、実際にサーバーアクセスを利用したアプリを作ってみましょう。わざわざサーバーにアクセスをするということは、つまり「ローカルな環境ではできないようなことをサーバーに行わせる」ということになります。App Inventorのコンポーネントでできることをわざわざサーバーにアクセスして行う必要はないですからね。

今回は、無料で誰でもWebサービスを作って公開できる「Google App Engine(GAE)」で簡単なデータベース利用のサービスを作り、それをApp Inventorから利用してみます。GAEは、Googleが提供するクラウドサービスで、Googleのアカウントによるログイン機能やGmailによるメール送受信、巨大データベース「データストア」によるデータ管理など、Googleの技術を活用したサービスが簡単に(でもないけど)作れます。

ここでは、GAEの基本や、JavaによるWebアプリケーション(サーブレット)の作成については特に説明をしません。GAEおよびサーブレットの詳細についてはGAEの入門記事を参照してください。

http://libro.tuyano.com/index2?id=855001

下のリスト欄に、2つのサーブレットのdoPostメソッドを挙げておきます。1つ目は、フォームなどから送られてきたデータをまとめてmydataというオブジェクトとしてデータストア(GAEのオブジェクトデータベース)に保存するものです。ここでは「y」「m」「d」「ymd」「msg」といったプロパティに、年月日、年月日をテキストにまとめたもの、そしてメッセージのテキストといったものを保管しています。

2つ目は、送信されてきた年月日の情報をもとに、その年月日のオブジェクトを検索し、そのメッセージを順に出力するというものです。これも「y」「m」「d」といった値が送られてきたものを取り出し検索をしています。


※開発環境と「Codenvy」について

GAEの開発は、通常はEclipseという開発ツールに専用のプラグインをインストールして作業するのですが、これは「ちょこちょこっとなにか作りたい」というようなときには少々大げさすぎるんですね。本格的にGAEを利用するわけでもなく、ちょっと簡単なプログラムをアップしておきたい、というような場合には、「Codenvy」が重宝します。

これは、Webで提供される開発ツールなのです。以下のアドレスで公開されています。

https://codenvy.com/

ここでアカウントを登録し、ログインすれば、ブラウザが開発ツールになります。Codenvyの大きな特徴は、各種のクラウドサービスに対応していることです。GAEにももちろん対応しており、プロジェクトを作って、GAEにログインし、メニューを選ぶだけでプロジェクトをGAEにデプロイ(アップロード)できてしまいます。「GAEでちょこっと開発したい」という人にはお勧めです。(ただし、Eclipseの本格環境に比べると低機能です)


※下図は、CodenbyのIDE。作ったプログラムをGAEにデプロイするのも簡単!

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※サンプルのサーブレットのdoPostメソッド(データの保存)

// import java.io.*;
// import javax.servlet.http.*;
// import com.google.appengine.api.datastore.*;

public void doPost(HttpServletRequest request, 
        HttpServletResponse response) 
        throws IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/plain;charset=utf-8");
    String msg = request.getParameter("msg");
    String y = request.getParameter("y");
    String m = request.getParameter("m");
    String d = request.getParameter("d");
  
    Entity entity = new Entity("mydata");
    entity.setProperty("msg",msg);
    entity.setProperty("y",y);
    entity.setProperty("m",m);
    entity.setProperty("d",d);
    entity.setProperty("ymd",y + "-" + m + "-" + d);
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Key key = datastore.put(entity);
  
    PrintWriter out = response.getWriter();
    out.println("entity id: " + key.getId());
}

※サンプルのサーブレットのdoPostメソッド(データの検索)

// import java.io.*;
// import javax.servlet.http.*;
// import com.google.appengine.api.datastore.*;
// import com.google.appengine.api.datastore.Query.*;

public void doPost(HttpServletRequest request, 
        HttpServletResponse response) 
        throws IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/plain;charset=utf-8");
 
    String y = request.getParameter("y");
    String m = request.getParameter("m");
    String d = request.getParameter("d");
    String ymd = y + "-" + m + "-" + d;
  
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Query query = new Query("mydata");
  
    FilterPredicate filter = new FilterPredicate("ymd", FilterOperator.EQUAL, ymd);
    query.setFilter(filter);
    PreparedQuery prepare = datastore.prepare(query);
  
    for(Entity entity : prepare.asIterable()){
        response.getWriter().println(entity.getProperty("msg"));
    }
}

※関連コンテンツ

「App InventorによるAndroid開発入門」に戻る