ノラプログラマーの技術メモ

ネットで調べても出てこなかった情報を載せていきたい技術系ブログ。

【androidアプリ開発】SharedPreferencesに配列を保存する方法

概要

androidアプリ開発でデータベース(SQLite)に登録するまでもない情報をSharedPreferencesに登録することは多いと思う。主にアプリの設定値などだ。

このSharedPreferencesに配列を保存してみた。

環境

手順

1.GJONライブラリをインポートする

String配列などはそのままSharedPreferencesに保存できないので、JSON形式に変換してから保存する。読み込む際はJSONから再び配列形式に変換する。この変換に使うのがGSONだ。

GSONはgoogleが開発したJSON変換ライブラリらしい。下記のサイトから「gson-2.3.1.jar」をダウンロードして、プロジェクトファイルの「app/libs」フォルダの中にコピーしておく。

◆GSONのjarファイルをダウンロード
The Central Repository Search Engine

ライブラリはlibsフォルダに入れておくだけで読み込まれる。便利。

2.ボタンで設定値を読み書きしてみる

メインactivityのソースコードは以下の通り。型を決めないArrayListを利用してobject形式でデータを扱うようにしている。

package net.applien.gson;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {

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

        // ----- 横込ボタン
        Button read_button = (Button)findViewById(R.id.read_button);
        read_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 設定値を読み込む
                SharedPreferences pref = getSharedPreferences("TEST", Context.MODE_PRIVATE);
                String json = pref.getString("key", "");

                // JSON形式を配列に保存する
                ArrayList strings = new ArrayList();
                Gson gson = new Gson();
                strings = gson.fromJson(json, ArrayList.class);

                // テキストビューに表示する
                TextView textview = (TextView) findViewById(R.id.textview);
                for (int i = 0; i < strings.size(); i++) {
                    textview.append((String) strings.get(i) + "\n");
                }
            }
        });

        // ----- 保存ボタン
        Button save_button = (Button)findViewById(R.id.save_button);
        save_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 配列を作成する
                ArrayList strings = new ArrayList();
                strings.add("value01");
                strings.add("value02");
                strings.add("value03");

                // 配列をJSON形式に変換する
                Gson gson = new Gson();
                String json = gson.toJson(strings);

                // 設定値を保存する
                SharedPreferences pref = getSharedPreferences("TEST", Context.MODE_PRIVATE);
                pref.edit().putString("key", json).commit();

                Toast.makeText(v.getContext(), "保存しました", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, 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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

レイアウトのxmlはこんな感じ。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/save_button"
            android:text="save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/read_button"
            android:text="read"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>
</RelativeLayout>

保存ボタンを押すと配列を設定値に保存し、読み込みボタンを押すとtextviewにその内容を表示させます。以上ー。

androidアプリで「テキスト読み上げの設定」を開く方法

概要

androidアプリで設定画面を開きたい。普通に開くだけなら以下のコードでOK。

Intent intent = new Intent();
intent.setAction(Settings.ACTION_INPUT_METHOD_SETTINGS);
startActivity(intent);

でもどうせならもっと下位の階層の設定画面を開きたい。そっちの方がユーザーにとって便利だからだ。ここでは「テキスト読み上げの設定」を開く例を示す。

f:id:kawai_norimitsu:20150722082240p:plain

環境
解決法

intentのsetactionに「com.android.settings.TTS_SETTINGS」を設定する。androidは端末によって挙動が違うので、try - catchで例外処理しておいた方が良い。

Intent intent = new Intent();
intent.setAction("com.android.settings.TTS_SETTINGS");
try {
    startActivity(intent);
}
catch(ActivityNotFoundException e) {
    Toast.makeText(getApplicationContext(), "[設定] - [言語と入力] からテキスト読み上げを開いてください", Toast.LENGTH_LONG).show();
}

ちなみに「com.android.settings.TextToSpeechSettings」で同様のことができるとのネット情報があるけど、こちらは現在では使われていない様子。

警告文「ActionBarActivity is deprecated」が出た時の対処方法

概要

Android Studioで低いAPIレベルのものに対応しようとすると、次のような警告が発生。

android.support.v7.app.ActionBarActivity is deprecated

エラーではないけど気持ち悪いので対処することにした。

環境
対処法

ActionBarActivityが非推奨となっているための警告なので、代わりにAppCompatActivityを使う。

具体的には次のようにActivityの継承元を変更する。

public myActivity extends AppCompatActivity {
 ・・・
}

ブランドの強さの源は、プロモーションではなく、ブランドそのものの成果にある

要するに、商品やサービスを売るには広告よりそのものの価値が重要だということ。

全文はコチラ↓↓kawaidesu.com

windows8であるはずのファイルが検索できない時の解決法

windows8のインデックスサービスが悪さしていた件。

全文はコチラ↓↓kawaidesu.com

illustratorプラグインでバーコードを作る方法

概要

illustratorプラグイン(正確にはスクリプト)を使ってai形式のバーコードを作る方法。ベジェ曲線を使っているのでバーコードの拡大や縮小にも耐えられる。参考にしたのはこのページ。無料で作れちゃうからイイネ!

環境

windows8
illustrator CS6

手順

1.バーコード作成スクリプトを設置する。

バーコード作成スクリプトこちらからダウンロードする。

ダウンロードしたzipファイルを展開すると「JANバーコード作成.jsx」ファイルがあるはず。このファイルをイラストレーターのスクリプトフォルダに移動する。

具体的には、illustratorフォルダのプリセットの中のスクリプトフォルダの中に移動する。

C:\Program Files\Adobe\Adobe Illustrator CS6 (64 Bit)\Presets\ja_JP\スクリプト

f:id:kawai_norimitsu:20150602192610p:plain

2.illustratorでバーコードを作ってみる

illustratorを起動して[ファイル]-[スクリプト]-[JANバーコード作成]をクリックする。すると次のようなダイアログが表示される。

f:id:kawai_norimitsu:20150602192851p:plain

13桁のバーコードの数字を入力する。チェックデジットを除いた12桁を入力した場合は自動的にチェックデジットを計算してくれる。

続いて「バーコードにヒゲをつけますか?」と聞かれるので、ここはお好みで。ちなみに下の画像の左はヒゲあり、右はヒゲなし。

f:id:kawai_norimitsu:20150602192132g:plain

するとai形式のバーコードが作れます。以上!

商品バーコードの登録方法と費用まとめ

概要

商品にバーコードを付けることにした。実店舗でも流通させたいからだ。バーコードが登録できるまでの方法をメモしておく。

f:id:kawai_norimitsu:20150602151157p:plain

バーコードの登録費用

・バーコード利用の手引き 1,200円
・バーコード登録申請料(年商10億円未満の小売業の場合) 10,800円

バーコードの付け方

1.バーコード利用の手引きを買う

登録申請書が必要なので、「バーコード利用の手引き」を買う。近くの商工会議所で買えるけど、amazonでポチるのが便利。これ1冊でほぼ完璧に分かる。薄いのですぐ読めるし、とても分かりやすく書かれている。

www.amazon.co.jp

2.登録申請料を支払う

「バーコード利用の手引き」に振込用紙が付いているので、それを利用して登録申請料を支払う。年商10億円未満の小売業なら10,800円。3年ごとに更新申請料が必要。年商や業態によって料金が変わるので注意。

3.登録申請書を提出する

登録申請書の裏面に振込用紙のコピーを貼り付けて、流通システム開発センターに提出する。すると登録通知書が届く。約2週間かかると手引きに書かれてたけど、実際には3日ほどで届いた。

登録通知書にGS1事業者コードが書かれているので、これをメモしておく。

f:id:kawai_norimitsu:20150602134225j:plain

4.バーコードを作る

バーコードの下にある数字は次の意味がある。

f:id:kawai_norimitsu:20150602143342p:plain

① GS1事業者コード
② 商品コード(001~999まで任意の数字)
チェックデジット(読み誤り防止のための数字)

これを踏まえてバーコードを作る。

例えば事業者コードが987654321、商品コードが001とする。チェックデジットを計算すると「2」になる。これらをつなげると、9876543210012がバーコードの数字になる。

チェックデジットの計算方法は手引書を参照のこと。より具体的なバーコードの作り方は下記のサイトを参考にしてみてください。無理なら業者に外注するのも手かも。

kawaidesu.hatenablog.com

5.バーコードの読み取りテストをする

バーコードをillustratorなどで作成して商品の箱やラベルシールなどに印刷する。最後にこれが読み取れるかテストする。テストするためにはバーコードリーダーが必要。

www.amazon.co.jp

このバーコードリーダーをパソコンにUSB接続する。そして印刷したバーコードを読み取ってみると、メモ帳などにキー入力されたかのように数字が自動的に入力される。もちろんバーコード数字の最後に改行を追加したりもできる。

f:id:kawai_norimitsu:20150602144125j:plain

以上でバーコードの登録は終わりです。お疲れ様でしたー。

バーコードが読み取れない場合

もしバーコードがうまく読み取れない場合は、次の点を確認してみる。

インクジェットプリンターで印刷したためバーコードがにじんで読み取れない
⇒インクジェットは水に弱いので、レーザープリンタでバーコードを印刷した方がよい

・バーコードが小さすぎるので読み取れない
⇒バーコードの基本寸法は縦25.93mm、横37.29mm。最少サイズは縦20.74mm、横29.83mm。国内だけの出荷に限るなら最少の縦サイズは11mmになる。