developerの情報からコーディングしてみます。
1. activity_main.xml
<LinearLayout 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"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="1">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText_dataText"
android:layout_weight="1.04" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:id="@+id/button_save"
android:onClick="onButtonSaveClick" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Load"
android:id="@+id/button_load"
android:onClick="onButtonLoadClick" />
</LinearLayout>
</LinearLayout>
2. FeedReadeerContract.java クラスを新規作成
package com.example.training.sqldatasave;
import android.provider.BaseColumns;
/**
* Created by on 2016/04/02.
*/
public final class FeedReaderContract {
// To prevent someone from accidentally instantiating the contract class,
// give it an empty constructor.
public FeedReaderContract() {}
/* Inner class that defines the table contents */
public static abstract class FeedEntry implements BaseColumns {
public static final String TABLE_NAME = "entry";
public static final String COLUMN_NAME_ENTRY_ID = "entryid";
public static final String COLUMN_NAME_TITLE = "title";
public static final String COLUMN_NAME_CONTENT = "content";
}
}
3. FeedReaderDbHelper.javaを新規作成
package com.example.training.sqldatasave;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.example.training.sqldatasave.FeedReaderContract.FeedEntry;
/**
* Created by 2016/04/02.
*/
public class FeedReaderDbHelper extends SQLiteOpenHelper {
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + FeedEntry.TABLE_NAME + " (" +
FeedEntry._ID + " INTEGER PRIMARY KEY," +
FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
FeedEntry.COLUMN_NAME_CONTENT + TEXT_TYPE +
" )";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "FeedReader.db";
public FeedReaderDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// This database is only a cache for online data, so its upgrade policy is
// to simply to discard the data and start over
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
public void insertDb(SQLiteDatabase db, int id, String title, String content){
// Create a new map of values, where column names are the keys
ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
values.put(FeedEntry.COLUMN_NAME_TITLE, title);
values.put(FeedEntry.COLUMN_NAME_CONTENT, content);
// Insert the new row, returning the primary key value of the new row
long newRowId;
newRowId = db.insert(
FeedEntry.TABLE_NAME,
null, //FeedEntry.COLUMN_NAME_NULLABLE, // "COLUMN_NAME_NULLABLE"は認識されないみたい
values);
if(newRowId < 0){
Log.e("sample", "insertDbでエラー発生");
}
}
}
4. MainActivity.javaはこんな感じに
package com.example.training.sqldatasave;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TextView tv;
/*
DatabaseHelper mDbHelper;
SQLiteDatabase mDb;
*/
FeedReaderDbHelper feedReaderDbHelper;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.editText_dataText);
// mDbHelper = new DatabaseHelper(this);
// mDb = mDbHelper.getWritableDatabase();
feedReaderDbHelper = new FeedReaderDbHelper(this);
db = feedReaderDbHelper.getWritableDatabase();
}
@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);
}
public void onButtonSaveClick(View v){
Toast.makeText(MainActivity.this, "Saveクリックした", Toast.LENGTH_SHORT).show();
feedReaderDbHelper.insertDb(db, 1, "title1", tv.getText().toString());
tv.setText("Saveクリック");
}
// 使わないけど一応
public void onButtonLoadClick(View v){
Toast.makeText(MainActivity.this, "Loadクリックした", Toast.LENGTH_SHORT).show();
tv.setText("Loadクリック");
}
}
2016年4月4日月曜日
2016年2月28日日曜日
VAIO Tap 11をwindows10にupdateしてみる
基本的にVAIOのサイトに記載されている手順で良いのですが、ブロードバンドが細いのでbootableにしたUSBメモリからupdateを行います(VAIO公式の手順は予約update)。
VAIOのサイトの"詳細"の方の手順に則ります。
- Adminでログイン
- VAIO updateで全てupdateする
- パッチファイルを実行 < 最初のシーケンスに書かれていないので忘れがち
- USBメモリのsetup.exeを実行
そして問題は...Windows10を起動するとLCDの輝度調整が出来ません...明るッ!
(ドライバは"マイクロソフト標準" の表示)
パッチファイルを忘れていたので再度Windows8.1に戻してパッチをあてるも症状変わらず
(Windows10でVAIO updateすると3点ほどinstallされたので別件の効果はある)
サイトを見てもIntel HD graphicsは配布されていないようでしたが、
C:\Windows\Driver ...
下にHD graphicsが存在することを発見
(プリインストール時のもの?。VAIOのサイトになぜかドライブ上のドライバの在処が書かれていたのがヒントに)
中にsetup.exeがあるので実行すると...おぉ、明るさ変わった!
ということで、怪しいけどプリインストールのドライバをsetupすることで解消されるようです。
(サイトで最新を配布してくれればいいのに...)
クリーンインストールしたThinkPadは、メーカー製ドライバを入れなくても明るさもバッテリーも動いている(ThinkVantage不要か??というくらい...買収されたのでアプリ入れたくないから好都合なのだが)のに随分違うものです。
あと気になった点。
Windows10のupdate時の序盤に"最新のアップデートを適用"みたいなのをチェックするとえらく時間がかかる(先に進まない)のでしない方がよさそう(そしてキャンセルもとっても時間がかかる)
今回は"適用しない"にしてネットワークも切断して実施
(update終了してからアプリのアップデートなどにとっても時間がかかっているようだけどそれは放置)
VAIOのサイトの"詳細"の方の手順に則ります。
- Adminでログイン
- VAIO updateで全てupdateする
- パッチファイルを実行 < 最初のシーケンスに書かれていないので忘れがち
- USBメモリのsetup.exeを実行
そして問題は...Windows10を起動するとLCDの輝度調整が出来ません...明るッ!
(ドライバは"マイクロソフト標準" の表示)
パッチファイルを忘れていたので再度Windows8.1に戻してパッチをあてるも症状変わらず
(Windows10でVAIO updateすると3点ほどinstallされたので別件の効果はある)
サイトを見てもIntel HD graphicsは配布されていないようでしたが、
C:\Windows\Driver ...
下にHD graphicsが存在することを発見
(プリインストール時のもの?。VAIOのサイトになぜかドライブ上のドライバの在処が書かれていたのがヒントに)
中にsetup.exeがあるので実行すると...おぉ、明るさ変わった!
ということで、怪しいけどプリインストールのドライバをsetupすることで解消されるようです。
(サイトで最新を配布してくれればいいのに...)
クリーンインストールしたThinkPadは、メーカー製ドライバを入れなくても明るさもバッテリーも動いている(ThinkVantage不要か??というくらい...買収されたのでアプリ入れたくないから好都合なのだが)のに随分違うものです。
あと気になった点。
Windows10のupdate時の序盤に"最新のアップデートを適用"みたいなのをチェックするとえらく時間がかかる(先に進まない)のでしない方がよさそう(そしてキャンセルもとっても時間がかかる)
今回は"適用しない"にしてネットワークも切断して実施
(update終了してからアプリのアップデートなどにとっても時間がかかっているようだけどそれは放置)
2016年2月21日日曜日
android studioのprojectでビルド対象versionの変更
いざエミュレータで試そうとすると、"Older versionだよ"と怒られた時の対処方法
1. Projectのペインを表示する
2. "app"を右クリックし、"Open Module Setting"を選択
3. "Compile Sdk Version"を適当なものに変更する
1. Projectのペインを表示する
2. "app"を右クリックし、"Open Module Setting"を選択
3. "Compile Sdk Version"を適当なものに変更する
Intentでweb siteを表示する
ボタンを押されたらブラウザでweb siteを表示するintentを作ってみる
1. デザイナにEdit Text (plain Text)を配置
2. デザイナでボタンを配置
3. ボタンのハンドラを以下で記載
// ボタン押下処理
public void onButtonClick(View v){
EditText edv = (EditText) findViewById(R.id.editText);
String stringUri = edv.getText().toString();
// Uri uri = Uri.parse("http://www.google.co.jp");
Uri uri = Uri.parse(stringUri);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
エミュレータでも動作確認できますね
1. デザイナにEdit Text (plain Text)を配置
2. デザイナでボタンを配置
3. ボタンのハンドラを以下で記載
// ボタン押下処理
public void onButtonClick(View v){
EditText edv = (EditText) findViewById(R.id.editText);
String stringUri = edv.getText().toString();
// Uri uri = Uri.parse("http://www.google.co.jp");
Uri uri = Uri.parse(stringUri);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
エミュレータでも動作確認できますね
2016年2月20日土曜日
ボタン押下時のハンドラを書く(その2)
よく書籍に乗っていたの(そんでもって前に書いたもの)は、
1. デザイナでボタンを配置する(この時のIDを覚えておく)
2. ハンドラの関数を書く。
3.onCreateでボタンをfindViewByIdして、ハンドラとして登録する。
ですが、ボタンの場合のもうちょっと簡単に書く方法
1. デザイナでボタンを配置する
2. ハンドラの関数をMainAcitivyjavaに書く (MainActivityのメソッドとして書く)
public void onButtonClick(View v){
Toast.makeText(MainActivity.this, "クリックした",Toast.LENGTH_SHORT).show();
}
3. デザイナで配置したボタンを選択し、 onClickに"2"で記載したハンドラ名を選ぶ
こっちの方が簡単ですね。
1. デザイナでボタンを配置する(この時のIDを覚えておく)
2. ハンドラの関数を書く。
3.onCreateでボタンをfindViewByIdして、ハンドラとして登録する。
ですが、ボタンの場合のもうちょっと簡単に書く方法
1. デザイナでボタンを配置する
2. ハンドラの関数をMainAcitivyjavaに書く (MainActivityのメソッドとして書く)
public void onButtonClick(View v){
Toast.makeText(MainActivity.this, "クリックした",Toast.LENGTH_SHORT).show();
}
3. デザイナで配置したボタンを選択し、 onClickに"2"で記載したハンドラ名を選ぶ
こっちの方が簡単ですね。
2016年2月4日木曜日
レイアウトファイルを書き始める
XMLファイルを書き始めはこんな感じでやるみたいだ。
1. ペインをProjectにする
2. res/layoutを右クリック
3. 新規 -> layout resource file を選択
入力用のダイアログが表示されるので以下入力
4. "File name"にファイル名(につながる)を入れる
先頭大文字じゃなくてもいいみたい...
というか、大文字使えないみたいなので、アンダースコアとかにするみたいだ
5. "Root element"に配置用のタグ(ListViewとかLinearLayoutとか)を記載する
文字を入れていると補間してくれるので適当に ...
6. OKボタン押下
デザイナに表示されるので、"デザイン" or "テキスト"に切り替えて表示を調整する
(Projectペインの"layout"に追加されているので選んで修正)
1. ペインをProjectにする
2. res/layoutを右クリック
3. 新規 -> layout resource file を選択
入力用のダイアログが表示されるので以下入力
4. "File name"にファイル名(につながる)を入れる
先頭大文字じゃなくてもいいみたい...
というか、大文字使えないみたいなので、アンダースコアとかにするみたいだ
5. "Root element"に配置用のタグ(ListViewとかLinearLayoutとか)を記載する
文字を入れていると補間してくれるので適当に ...
6. OKボタン押下
デザイナに表示されるので、"デザイン" or "テキスト"に切り替えて表示を調整する
(Projectペインの"layout"に追加されているので選んで修正)
2016年1月25日月曜日
画像リソースをstaticに使用する
ちょっと参考にしている情報と違っていた為...Android studioのversionの違いかもしれないけど(Betaのままだし)
1. explorerで適当な画像(今回は493x357でPNGにした画像)をCtrl-Cでコピー
ファイル名はすべて小文字、拡張子も小文字
2. Android studioのProjectペインでres/drawableのを左クリックしてCtrl-Vでペーストする
3. dialogが出るのでそのままOKとする
今回は"mdpi"が選択されているがその状態で良いようだ
ここで"drawable"を選択した場合に実行時に "INSTALL_FAILED_OLDER_SDK" エラーが発生
(対応version云々と思わしきエラーも出ていたが、上記操作をすれば出なかった)
4. ImageViewにstaticに使用する場合はImageViewをダブルクリックして"..."の選択で↑で
追加したリソースを選択する
1. explorerで適当な画像(今回は493x357でPNGにした画像)をCtrl-Cでコピー
ファイル名はすべて小文字、拡張子も小文字
2. Android studioのProjectペインでres/drawableのを左クリックしてCtrl-Vでペーストする
3. dialogが出るのでそのままOKとする
今回は"mdpi"が選択されているがその状態で良いようだ
ここで"drawable"を選択した場合に実行時に "INSTALL_FAILED_OLDER_SDK" エラーが発生
(対応version云々と思わしきエラーも出ていたが、上記操作をすれば出なかった)
4. ImageViewにstaticに使用する場合はImageViewをダブルクリックして"..."の選択で↑で
追加したリソースを選択する
登録:
投稿 (Atom)