複数のActivity間を跨いでプログラム全体でデータを受渡しする方法 | Androidアプリ開発

Androidアプリ開発において、
グローバル変数というものは存在せず、Activity間でデータの受渡しをするには工夫が必要です。

この記事ではAndroidアプリ開発において、
複数のActivity間を跨ってプログラム全体でデータを受渡しする方法を記載します。
スポンサーリンク

複数のAcitivy間を跨いでデータの受渡しをする方法

複数のAcivity間を跨ったデータ受渡し方法には以下の3通りがあります。
  • ① Intentにおけるデータ受渡しを利用する
  • ② Application継承クラスを作成する
  • ③ ローカルデータの保存/読込を利用する
以降では上記の3通りの実装方法やデメリットについて記載します。
スポンサーリンク

① Intentにおけるデータ受渡しを利用する

まず1つ目はIntentにおけるデータ受渡しを利用する方法です。

やり方はIntentにputExtraでキーと値を代入してからActivityを呼び出します。
次に呼び出されたActivityでgetExtraメソッドにてそのキーを指定して値を読み出します。

この方法のデメリットは以下です。
  • 受け渡せる変数型が限られる
  • 受け渡すデータの数が増えるのに比例してコードが複雑になる。

サンプルコード

以下がサンプルコードです。

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

        Intent intent = new Intent(this, SubActivity.class);
        intent.putExtra("key", "value");
        startActivity(intent);
    }
}
SubActivity.java
public class SubActivity extends AppCompatActivity {

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

        Intent intent = getIntent();
        String str = intent.getStringExtra("key"); //valueが代入される
    }
}
スポンサーリンク

② Application継承クラスを作成する

私が一番好きな方法がこのApplication継承クラスを作成する方法です。

AndroidアプリにおいてはApplicationクラスのオブジェクトが必ず一つ保持されており、アプリのどこからでもアクセスすることが可能です(正確にはContextオブジェクトが存在してさえいればアクセス可能)。

よって、Application継承クラスを作成し、
もとのApplicationクラスオブジェクトと置き換えれば、
Androidアプリのどこからでもアクセス可能な変数を持たせることが可能です。

さらにArrayListや自作クラスオブジェクトなどといった任意のオブジェクトをやり取りすることが可能です。

Application継承クラスを作る

以下がApplication継承クラスの作成例です。

ここではgetter/setterを実装していますが、public指定してグローバル変数のように使用しても良いです。

Common.java
public class Common extends Application {
    private boolean IsOptionEnable = false;

    @Override
    public void onCreate() {
        super.onCreate();
    }

    boolean getIsOptionEnable() { return IsOptionEnable; }
    void setIsOptionEnable(boolean value) { IsOptionEnable = value; }
}

AndroidManifest.xmlにおいて作成した継承クラスを登録する

次にAndroidManifest.xmlにおいて、
作成したApplicaiton継承クラスを登録します。

以下がその例です(android:nameの箇所です)。

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.areseiproject">

    <application
        android:name=".Common"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

使用方法の例

最後に使用例です。

ActivityのonCreateなどでApplication継承クラスのオブジェクトを取得します。

オブジェクトを取得するためには、
getApplication()でApplicationオブジェクトを取得し、キャストさせます。

MainActivity.java
public class MainActivity extends AppCompatActivity {
    Common c;

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

        c = (Common)getApplication();

        c.setIsOptionEnable(true);
    }
}
スポンサーリンク

③ローカルデータの保存/読込を利用する

最後にローカルデータの保存/読込を利用する方法です。
Activity間だけでなく、不揮発として保存したい場合はこの方法を使うのが良いでしょう。

ローカルデータの保存/読込については、おおまかには以下の3通りの方法があります。
  1. SharedPreferenceを利用する
  2. SQLiteデータベースを利用する
  3. Streamを用いて自前で実装する
各種ローカルデータ保存方法の比較は以下の記事にまとめていますので、そちらを参照願います。
スポンサーリンク

まとめ

この記事ではActivity間を跨ってデータをやり取りする方法を3つ紹介しました。

単純にグローバルな変数を持ちたいだけの場合は、
①と③については以下のようなデメリットがあるため、
②のApplicatin継承クラスを作成する方法をオススメします。
  • ①Intentにおけるデータ受渡し
    • 受け渡せるオブジェクトが限られる(※)
    • 受渡しをしたいデータの数と比例してコードが増える
  • ③ローカルデータ保存:
    • 受け渡せるオブジェクトが限られる(※)
    • 不揮発として保存したい訳ではない場合はコードが複雑になるだけ
    • Streamで自前で実装した場合には例外を徹底的に実装する必要がある
※…以下の記事で紹介しているGsonを利用すれば自作クラスオブジェクトなどを文字列として保存可能です。
しかし、コードが複雑になるだけなので、
やはり②のApplication継承クラスを作成する方法がオススメです。
Androidアプリ開発
スポンサーリンク
Androidアプリ開発 記事一覧
Androidアプリ開発 記事一覧
Androidアプリ開発の記事一覧を以下にまとめています。
良かったらご覧ください。

Androidアプリ開発 記事一覧
カテゴリ広告: Androidアプリ開発
スポンサーリンク: Androidアプリ開発を個人レッスンで学ぶなら...?
Androidアプリ開発は一人で学んでいても限界があります。
そこでオススメなのがオンラインでAndroidアプリ開発を学べる「コードキャンプ」。
個人レッスンで丁寧に教えてくれます。

無料レッスン体験も可能なので、まずは無料体験から試してみてはいかがでしょうか?

Androidアプリ開発個人レッスン
一般広告: モバイルバッテリー
スポンサーリンク
Aresei-note
タイトルとURLをコピーしました