Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidアプリ開発:シングルトンパターンでHashMapを保存・管理する方法

具体的な実装例に入る前に、まずシングルトンデザインパターンについて確認しておきましょう。シングルトンとは、あるクラスのインスタンス化をアプリケーション全体で1つだけに制限するデザインパターンのことです。主な用途としては、同時実行(並行処理)の制御や、データストアへのアクセスポイントをアプリケーション内に一元化することなどが挙げられます。

この記事では、AndroidアプリにおいてHashMap(ハッシュマップ)をシングルトンクラスに保存する方法を、ステップごとに解説していきます。

手順1:新しいプロジェクトを作成する

Android Studioを開き、「File」→「New Project」を選択して、必要な情報をすべて入力して新しいプロジェクトを作成します。

手順2:レイアウトファイル(activity_main.xml)にコードを追加する

res/layout/activity_main.xml に以下のコードを追加します。

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
xmlns:tools = "https://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   tools:context = ".MainActivity"
   android:orientation = "vertical">
   <Button
      android:id = "@+id/show"
      android:text = "Save HashMap in singleTone"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content" />
</LinearLayout>

上記のコードでは、ボタンを1つ配置しています。ユーザーがこの「show」ボタンをタップすると、HashMapのデータがシングルトンに保存される仕組みです。

手順3:MainActivity.java にコードを追加する

src/MainActivity.java に以下のコードを追加します。

package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
public class MainActivity extends AppCompatActivity {
    Button show;
    JSONObject jsonObject;
    singleTonExample singletonexample;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show = findViewById(R.id.show);
        singletonexample = singleTonExample.getInstance();
        singletonexample.init(getApplicationContext());
        show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                singletonexample.put("paper", 10.0);
                singletonexample.put("recharge", 10.0);
                singletonexample.put("other bills", 10.0);
                Toast.makeText(MainActivity.this,singletonexample.getHashMap(), Toast.LENGTH_LONG).show();
            }
        });
    }
}

上記のコードでは、singleTonExample をシングルトンクラスとして使用しています。そこで、singleTonExample.java というクラスファイルを新規作成し、以下のコードを追加しましょう。

package com.example.andy.myapplication;
import android.content.Context;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class singleTonExample {
    private static final singleTonExample ourInstance = new singleTonExample();
    private Map<String, Double> map = new HashMap<String, Double>();
    private Context appContext;
    private singleTonExample() { }
    public static Context get() {
        return getInstance().getContext();
    }
    public static synchronized singleTonExample getInstance() {
        return ourInstance;
    }
    public void init(Context context) {
        if (appContext == null) {
            this.appContext = context;
        }
    }
    private Context getContext() {
        return appContext;
    }
    public void put(String string, double d) {
        map.put(string,d);
    }
    public String getHashMap() {
        return String.valueOf(Collections.singletonList(Arrays.asList(map)));
    }
}

コードのポイント

このシングルトンクラスでは、privateコンストラクタと静的な自身のインスタンス(ourInstance)を定義することで、外部からの複数回のインスタンス化を防いでいます。getInstance() メソッドは synchronized 修飾子が付いているため、マルチスレッド環境でも安全に動作します。また、put() メソッドでHashMapにデータを追加し、getHashMap() メソッドで保存されたデータを文字列として取得できるようになっています。

アプリを実行して動作を確認する

それでは、実際にアプリを実行してみましょう。Android端末を実機でパソコンに接続していることを前提とします。Android Studioからアプリを実行するには、プロジェクト内のアクティビティファイルを開き、ツールバーのRunアイコン(再生ボタン)をクリックします。表示される選択肢の中から接続したモバイルデバイスを選択すると、端末の画面に以下のような初期画面が表示されます。

Androidアプリ開発:シングルトンパターンでHashMapを保存・管理する方法

次に、この画面のボタンをタップしてください。すると、HashMapの値がシングルトンに保存され、Toast(トースト)として保存された値が以下のように表示されます。

Androidアプリ開発:シングルトンパターンでHashMapを保存・管理する方法

このように、シングルトンパターンを活用すれば、アプリ全体で共有したいHashMapのデータを一元的に管理できます。ActivityやFragmentが破棄されてもシングルトンのインスタンスは保持されるため、プロセスが生きている限りデータを維持できるのが大きなメリットです。ただし、メモリリークを避けるため、ContextはApplication Contextを使用する点に注意してください。

  1. 【Android】GSONライブラリを使ってHashMapをJSONに変換する方法

    GSONはGoogleが提供するJava向けライブラリで、JavaオブジェクトをJSONへ、あるいはJSONをオブジェクトへ相互に変換するために使われます。内部ではシリアライズ(直列化)とデシリアライズ(復元)の仕組みによって動作しています。 この記事では、GSONライブラリを使用してAndroidアプリ内でHashMapをJSON形式に変換する方法を、ステップごとにわかりやすく解説します。 ステップ1:新規プロジェクトを作成する まず、Android Studioで新しいプロジェクトを作成します。メニューバーから「File」⇒「New Project」を選択し、必要な項目をすべて入力してプロ

  2. AndroidでデバイスID(ANDROID_ID)を取得して表示する方法【初心者向け】

    この記事では、Androidアプリで端末固有の識別子である「デバイスID(ANDROID_ID)」を取得し、画面に表示する方法をステップごとに解説します。Settings.Secureクラスを利用すれば、特別な権限を追加することなく、シンプルなコードでデバイスIDを取得できます。 ANDROID_IDとは? ANDROID_IDは、Android端末ごとに割り当てられる64ビットの16進数文字列からなる識別子です。ユーザーの個人情報に直接紐づかないため、アナリティクスや広告配信などで広く利用されています。ただし、端末の初期化(ファクトリーリセット)で値が変わる点や、Android 8.0以降で