SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~アプレットベースのRIAフレームワーク「Apache Pivot」(4)

第16回

サーバーからJSONデータを取得する

 JSONデータをファイルから直接ロードするのは、比較的簡単でしたが、実際の表示では、サーバーからダイナミックにデータを取得し、それを表示させることが多いものです。ファイルではなく、サーバーにアクセスしてデータを取得するようにするためには、どのようなやり方をすればいいか考えてみましょう。

 まず、サーバー側に簡単なプログラムを設置します。ここでは、プロジェクトが配置される場所(ここでは、http://サーバー/HelloPivot/)に、「getsample.php」というPHPのスクリプトを用意することにします。ソースコードは次のようになります。

<?php
$data =<<< EOD
[
    {name:"Tuyano",mail:"tuyano@mac.com",tel:"090-9999-9999"},
    {name:"Hanako",mail:"hanako@flower",tel:"080-7777-6666"},
    {name:"Taro",mail:"taro@yamada",tel:"03-4444-5555"},
]
EOD;

header('Content-type:text/plain; charset=utf8');
echo $data;

 今回は、先ほどのJSONデータと同じものをそのままテキストデータとして返すだけのシンプルなものにしてあります。実際は、状況に応じて、出力する$dataの内容を書き換えるような形になるでしょう。

ソースコードを修正する

 では、ソースコードを修正しましょう。次のようにHelloApp.javaを書き換えてください(startupメソッド以外は変更がないため省略してあります)。

package jp.tuyano.pivot;

import org.apache.pivot.collections.*;
import org.apache.pivot.serialization.JSONSerializer;
import org.apache.pivot.util.concurrent.*;
import org.apache.pivot.web.GetQuery;
import org.apache.pivot.wtk.*;
import org.apache.pivot.wtkx.WTKXSerializer;

public class HelloApp implements Application {
    private Window window;
    private TableView table1;
    private Label msg;
    
    @Override
    public void startup(Display display, Map<String, String> map)
            throws Exception {
        WTKXSerializer serializer = new WTKXSerializer();
        window = (Window)serializer.readObject(this, "HelloApp.wtkx");
        msg = (Label)serializer.get("msg");
        table1 = (TableView)serializer.get("table1");
        GetQuery query = new GetQuery(【サーバー指定】, "/HelloPivot/getsample.php");
        query.setSerializer(new JSONSerializer("utf-8"));
        query.execute(new TaskAdapter<Object>(new TaskListener<Object>() {
            @Override
            public void taskExecuted(Task<Object> task) {
                List<Map> data = (List<Map>)task.getResult();
                table1.setTableData(data);
            }
                
            @Override
            public void executeFailed(Task<Object> task) {
                msg.setText(task.getFault().getMessage());
            }
        }));

        window.open(display);
    }

    ……略……
}
図2 サーバーにアクセスしてデータを取得する。これはアプリケーションで実行したところ。
図2 サーバーにアクセスしてデータを取得する。これはアプリケーションで実行したところ。

 最後に、HelloAp.wtkxの<TableView>を修正しましょう。タグに記述されていた「 tableData="@jsondata.json"」という属性を削除してください。これで、JSONファイルではなく、startupメソッドで用意した処理を使って外部からデータを読み込むようになります。なお、ソースコード中の【サーバー指定】は、それぞれのサーバーに置き換えて使ってください。

次のページ
Queryクラスによるサーバーアクセス

この記事は参考になりましたか?

Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5114 2010/06/02 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー