LoginSignup
6
6

More than 5 years have passed since last update.

Restletフレームワークを使いAndroidアプリ上でHTTP JSON APIサーバーを動かす

Last updated at Posted at 2015-03-11

Andriod版のRestletをzipでダウンロードして解凍する

(またはプロジェクト生成後maven経由で依存関係解決するようにappのbuild.gradleを設定する)

Android Studioで新規プロジェクトをつくる

[New Project] -> [プロジェクト名とかを適当に決める] -> [Blank Activity]

Restletのjarを配置する

~/Downloads/restlet-android-2.3.1/lib/から
~/AndroidstudioProjects/適当なプロジェクト名/app/libs/

org.restlet.ext.json.jar
org.restlet.ext.nio.jar
org.restlet.jar

をコピーする。
Android Studio上で増えたファイルを右クリックして[Add as library]をする。

アプリを編集する

MainActivity.java
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Component serverComponent = new Component();
        serverComponent.getServers().add(Protocol.HTTP, 8081);
        final Router router = new Router(serverComponent.getContext().createChildContext());
        router.attach("/test", TestResource.class);
        serverComponent.getDefaultHost().attach(router);
        try {
            serverComponent.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

TestResource.class のところでそんなクラスないぞと警告が表示されるはずなので、インスペクタから Create Class:TestResource をする。
そして以下のようなコードを書く。

TestResource
public class TestResource extends ServerResource {
    public TestResource()
    {
        Set<Method> allowedMethods = new HashSet<Method>();
        allowedMethods.add(Method.GET);
        allowedMethods.add(Method.PUT);
        setAllowedMethods(allowedMethods);
    }

    @Get
    public JsonRepresentation getResource()
    {
        JSONArray jsonArray = new JSONArray();
        jsonArray.put("hoge");
        return new JsonRepresentation(jsonArray);
    }

    @Put("json")
    public JsonRepresentation
        saveOrUpdateResource(Representation rep)
        throws JSONException, IOException
    {
        JSONArray jsonArray = new JSONArray();
        jsonArray.put("hoge");
        return new JsonRepresentation(jsonArray);
    }
}

マニフェストの設定

    <uses-permission android:name="android.permission.INTERNET"/>

がないと起動できない。

動作確認

実機かエミュレーターにインストールして起動完了後にブラウザで http://localhost:8081/test を開く

現実的には

ActivityじゃなくてServiceとしてバックグラウンドで動作するように実装すべきですがとりあえずRestletが本当にまともにAndroidで動くのか確認したかったという話です。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6