android:データの保存&読み込み
2015/11/11 01:38:52
SharedPreferencesを使う
初期動作、保存ファイル名を指定してプライベートモードでオープン。他のプロセスからもアクセスする場合は他のモードを選ぶ必要がある。xmlに保存されるらしいので'ファイル名'で間違ってないと思う。
データキーとデフォルト値を指定して数値データを読み込み。指定キーのデータが存在しなければデフォルト値が返る。
データ書き込みのためエディタオブジェクトを使う。
読み込みと同じくデータキーを指定してデータ書き込み。上の例では実行するたび数値が1増える。
apply()しないと保存が反映されない。commit()も同様の効果だがapply()は非同期、commit()は同期で動作するらしい。apply()のほうがちょっと早い、ということになる。
appendix:
現在日時管理にはCalendarクラスを使うのが主流であるが、これをそのまま保存すると結構なデータ量となるので、getTime()してDate(long型)のみ保存・読み込みするのが賢いやり方だと思う。しかしCalendarをそのまま保存したら実際どーなるかしらんし他の人がやるぶんにはどっちでもいいです。
SharedPreferences pr = getSharedPreferences("filename", MODE_PRIVATE);では上から見ていこう。
int nData = pr.getInt("data_key", 0);
SharedPreferences.Editor ed = pr.edit();
ed.putInt("data_key", nData + 1);
ed.apply();
初期動作、保存ファイル名を指定してプライベートモードでオープン。他のプロセスからもアクセスする場合は他のモードを選ぶ必要がある。xmlに保存されるらしいので'ファイル名'で間違ってないと思う。
データキーとデフォルト値を指定して数値データを読み込み。指定キーのデータが存在しなければデフォルト値が返る。
データ書き込みのためエディタオブジェクトを使う。
読み込みと同じくデータキーを指定してデータ書き込み。上の例では実行するたび数値が1増える。
apply()しないと保存が反映されない。commit()も同様の効果だがapply()は非同期、commit()は同期で動作するらしい。apply()のほうがちょっと早い、ということになる。
appendix:
現在日時管理にはCalendarクラスを使うのが主流であるが、これをそのまま保存すると結構なデータ量となるので、getTime()してDate(long型)のみ保存・読み込みするのが賢いやり方だと思う。しかしCalendarをそのまま保存したら実際どーなるかしらんし他の人がやるぶんにはどっちでもいいです。
PR
AdMob広告表示
2015/11/10 17:32:29
ムズすぎない? よっぽど狭き門にしたいのかな。
ともあれついさっきテスト広告・実際の広告ともに表示できた手順を書いておく。動作環境はlinux上のAndroid-Studio、Google RepositoryやSDKもろもろインストール済み前提で進行しますのでそのつもりでどうぞ。
基本は毎度おなじみこの㌻を見ながらの作業でOK。
○プロジェクト作成
なーんもファイル追加しない(ゆうてもマニフェスト等は勝手に作ってくれる)、Empty Activity以上にからっぽのAdd No Activityでプロジェクトを立ち上げる。
○build.gradle(Module: app)設定
プロジェクト構成のツリー表示から、いつも使うappの下(appツリー外)のGradle Scriptsツリーを展開、
build.gradleのふたつめ、Module: appと書かれたほうを開く。
Google Developersさんがご教授いただいてる通りに
追加した一行へマウスカーソルを合わせると、『もっと新しいバージョンのがありまっせ!』とpopupで教えてくれる。そこにはご丁寧に最新バージョンが書いてあるはずなので、7.5.0の部分を書き換える。今は8.3.0である。
Googleさん。
今は8.3.0である。
なんでしょうか7.5.0って。たのんます!
まあ散々表示できなかったのがソコに起因するのか確かでないゆえそれはいい。
変更するとなんやらpopupが出るのでSync Nowで同期すればgradleまわりはこれでヨシ。
○AndroidManifest.xml編集
例のページからまるっとコピペ、アイコン指定で@drawableになってるのを@mipmapに訂正してやる。
MainActivityの宣言部分があるので、まるっとコピペ前にMainActivity.javaを作成しておいたほうがいいかも。
○レイアウト側の広告実装
activity_mainレイアウトを新規に追加、ついでにstrings.xmlへテスト広告のユニットIDを追加する。
同レイアウトに広告と、
コレを追加する。
あとでソース全部バーン貼るから心配しなさんな。
○アクティビティ側の広告実装
――この3行で足りる。
Add No Activity以外でプロジェクトを作成すると、どーゆーわけか問題が発生してユニットIDやらなんやら指定せいよーと怒られる。
AndroidManifest.xml
</manifest>
Activity_main.xml xmlns:ads="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
banner_ad_unit_idはstrings.xmlで定義して中身はテスト広告のIDにしときましょう。
MainActivity.java
package xx.xx.xxx;// マニフェストファイルと同じパッケージ名
import android.app.Activity;
import android.os.Bundle;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
}
以上である。
マニフェストの編集でいっぺんミスるとMainActivityで使ってるRが参照できなくなるので、エラーをすべて修復してからプロジェクトをクリーンするとRが再構築される。
ともあれついさっきテスト広告・実際の広告ともに表示できた手順を書いておく。動作環境はlinux上のAndroid-Studio、Google RepositoryやSDKもろもろインストール済み前提で進行しますのでそのつもりでどうぞ。
基本は毎度おなじみこの㌻を見ながらの作業でOK。
○プロジェクト作成
なーんもファイル追加しない(ゆうてもマニフェスト等は勝手に作ってくれる)、Empty Activity以上にからっぽのAdd No Activityでプロジェクトを立ち上げる。
○build.gradle(Module: app)設定
プロジェクト構成のツリー表示から、いつも使うappの下(appツリー外)のGradle Scriptsツリーを展開、
build.gradleのふたつめ、Module: appと書かれたほうを開く。
Google Developersさんがご教授いただいてる通りに
compile 'com.google.android.gms:play-services-ads:7.5.0'この一行をdependenciesブロックへ追加する。
追加した一行へマウスカーソルを合わせると、『もっと新しいバージョンのがありまっせ!』とpopupで教えてくれる。そこにはご丁寧に最新バージョンが書いてあるはずなので、7.5.0の部分を書き換える。今は8.3.0である。
Googleさん。
今は8.3.0である。
なんでしょうか7.5.0って。たのんます!
まあ散々表示できなかったのがソコに起因するのか確かでないゆえそれはいい。
変更するとなんやらpopupが出るのでSync Nowで同期すればgradleまわりはこれでヨシ。
○AndroidManifest.xml編集
例のページからまるっとコピペ、アイコン指定で@drawableになってるのを@mipmapに訂正してやる。
コレも一緒にくっつけとくとベターであろう。<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
MainActivityの宣言部分があるので、まるっとコピペ前にMainActivity.javaを作成しておいたほうがいいかも。
○レイアウト側の広告実装
activity_mainレイアウトを新規に追加、ついでにstrings.xmlへテスト広告のユニットIDを追加する。
同レイアウトに広告と、
xmlns:ads="http://schemas.android.com/apk/res-auto"
コレを追加する。
あとでソース全部バーン貼るから心配しなさんな。
○アクティビティ側の広告実装
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest); }
――この3行で足りる。
Add No Activity以外でプロジェクトを作成すると、どーゆーわけか問題が発生してユニットIDやらなんやら指定せいよーと怒られる。
以上を踏まえたうえでサンプルソースを貼っておこう。
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.tt.onbt">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application android:allowBackup="true"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--Include the AdActivity configChanges and theme. -->
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
</application>
</manifest>
Activity_main.xml
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
banner_ad_unit_idはstrings.xmlで定義して中身はテスト広告のIDにしときましょう。
MainActivity.java
package xx.xx.xxx;// マニフェストファイルと同じパッケージ名
import android.app.Activity;
import android.os.Bundle;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
}
以上である。
マニフェストの編集でいっぺんミスるとMainActivityで使ってるRが参照できなくなるので、エラーをすべて修復してからプロジェクトをクリーンするとRが再構築される。
なんか編集がクソだけどほぼ自分用だからこれでいいやもう。
アプリ開発覚えたての覚書
2015/11/05 01:11:33
高度な内容はないよう!
いやーなんつってね。
1行目の空白がトリムされるの不満だわー。
前提として、開発環境はAndroid-Studio, 実行環境は前々回の記事で述べたgenymotionです。
自動生成される(layout内の)activity_main.xmlと、content_main.xmlの違いはなんじゃいー、と思ってたのですが。
それぞれ定義する部分が違うのねー。content_main.xmlはその名の通りメインのコンテンツ、いわばウィンドウのクライアント領域に関する部分なのな。対してactivity_main.xmlはメニュー部分とかウィンドウそのものというかクライアント領域以外の部分というか。
コレがよくわかってなかったせいかどーかわからんが、タッチに反応してテキスト出力するアクションが発生せずなんでやねん状態でしたわ。自動生成はメニューがなんたらとか無駄が多いよ君。
ApplicationTestの存在意義もなんだがわからん。特に触れなくてよいのか。
いやーなんつってね。
1行目の空白がトリムされるの不満だわー。
前提として、開発環境はAndroid-Studio, 実行環境は前々回の記事で述べたgenymotionです。
自動生成される(layout内の)activity_main.xmlと、content_main.xmlの違いはなんじゃいー、と思ってたのですが。
それぞれ定義する部分が違うのねー。content_main.xmlはその名の通りメインのコンテンツ、いわばウィンドウのクライアント領域に関する部分なのな。対してactivity_main.xmlはメニュー部分とかウィンドウそのものというかクライアント領域以外の部分というか。
コレがよくわかってなかったせいかどーかわからんが、タッチに反応してテキスト出力するアクションが発生せずなんでやねん状態でしたわ。自動生成はメニューがなんたらとか無駄が多いよ君。
ApplicationTestの存在意義もなんだがわからん。特に触れなくてよいのか。