Android Studioでアプリ開発!

Androidアプリ開発初心者の備忘録です。

【実装編】Android Studioで plist(プロパティリスト) を読み込む

iOSアプリで作った plist ファイルを Android アプリにも活用したい

【環境構築編】Android Studioで plist(プロパティリスト) を読み込む - Android Studioでアプリ開発!で、環境を構築するところまでを説明しました。今回は、実際に実装して plist を読み込んでみたいと思います。

実行イメージ

plist ファイルを読み込んで、内容を TextView に表示する簡単な例です。
f:id:jolene:20140725094717p:plain

plist ファイルを assets フォルダに用意する

iOSアプリで使った plist ファイルをそのままコピーすれば良いです。例では assets フォルダに english.plist を用意しています。
assets フォルダの操作に関してはAndroid Studioで assets フォルダのテキストファイルを読み込む - Android Studioでアプリ開発!を参照してください。
f:id:jolene:20140725095104p:plain
この plist の中身は以下のようになっています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>りんご</key>
        <string>apple</string>
    </dict>
    <dict>
        <key>バナナ</key>
        <string>banana</string>
    </dict>
    <dict>
        <key>みかん</key>
        <string>orange</string>
    </dict>
</array>
</plist>

コードを実装する

private メソッドの plistParser() が実際の処理を行なっている場所です。
String型はインポートした com.longevitysoft.android.xml.plist.domain.String が使われます。java.lang.String型を使う場合は明示的に指定する必要があります。

package com.example.plisttest;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

import com.longevitysoft.android.xml.plist.PListXMLHandler;
import com.longevitysoft.android.xml.plist.PListXMLParser;
import com.longevitysoft.android.xml.plist.domain.*;
import com.longevitysoft.android.xml.plist.domain.String;

import java.io.IOException;

public class MyActivity extends Activity {

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

        // plist ファイルを読み込み、TextView に文字列を設定する
        this.plistParser();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void plistParser() {
        PListXMLHandler handler = new PListXMLHandler();
        PListXMLParser parser = new PListXMLParser();
        parser.setHandler(handler);

        try {
            // assets フォルダの plist ファイルを開き、パースする
            parser.parse(this.getAssets().open("english.plist"));
        }
        catch (IllegalStateException e){
            // エラー処理を実装する
        }
        catch (IOException e){
            // エラー処理を実装する
        }
        PList plist = ((PListXMLHandler) parser.getHandler()).getPlist();

        java.lang.String text = "";     // TextView に表示するための文字列
        java.lang.String key = "";      // plist からデータを取得するためのキー

        Array array = (Array)plist.getRootElement();

        key = "りんご";
        Dict dict = (Dict)array.get(0);
        String string = dict.getConfiguration(key);
        text = java.lang.String.format("%s=%s\n", key, string.getValue());

        key = "バナナ";
        dict = (Dict)array.get(1);
        string = dict.getConfiguration(key);
        text += java.lang.String.format("%s=%s\n", key, string.getValue());

        key = "みかん";
        dict = (Dict)array.get(2);
        string = dict.getConfiguration(key);
        text += java.lang.String.format("%s=%s\n", key, string.getValue());

        // 画面の TextView に文字列を設定する
        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(text);
    }
}

これを実行すると、冒頭の実行イメージとなります。

まとめ

iOS アプリで使った plist ファイルをAndroidアプリでも使う方法について【環境構築編】と【実装編】の2回に分けて説明しました。plist のパースを行う処理は外部ブログラムを利用しました。以降の操作は iOS アプリでの扱い方と変わりないと思います。これで iOSアプリとAndroidアプリで共通の plist ファイルを使うことができると思います。
ただし、plist ファイルの内容が増えれば増えるほど parse するのに時間がかかり、ユーザを待たせることになります。読み込み中のダイアログを表示するのがユーザに対して親切だと思います。その方法についてはAndroid Studioで処理中を表すプログレスダイアログを表示する - Android Studioでアプリ開発!を参照してください。

Android StudioではじめるAndroidプログラミング入門

Android StudioではじめるAndroidプログラミング入門

初歩からわかるAndroid最新プログラミング 増補改訂版

初歩からわかるAndroid最新プログラミング 増補改訂版