Android プログラミング データ読み書き
ファイル読み書き
public class FileEx extends Activity implements View.OnClickListener{ private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT; private final static int MP = LinearLayout.LayoutParams.MATCH_PARENT; private final static String TAG_WRITE = "write"; private final static String TAG_READ = "read"; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.WHITE); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); editText = new EditText(this); editText.setText(""); editText.setLayoutParams(new LinearLayout.LayoutParams(MP,WC)); layout.addView(editText); layout.addView(makeButton("書き込み",TAG_WRITE)); layout.addView(makeButton("読み込み",TAG_READ)); } // ボタン作成 private Button makeButton(String text, String tag) { Button button = new Button(this); button.setText(text); button.setTag(tag); button.setOnClickListener(this); button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC)); return button; } @Override public void onClick(View v) { String tag = (String)v.getTag(); // ファイルへの書き込み if(TAG_WRITE.equals(tag)){ try{ String str = editText.getText().toString(); data2file(this,str.getBytes(),"test.txt"); }catch (Exception e){ editText.setText("書き込み失敗しました"); } // ファイルからの読み込み }else if(TAG_READ.equals(tag)){ try{ String str = new String(file2data(this,"test.txt")); editText.setText(str); }catch (Exception e){ editText.setText("読み込み失敗しました"); } } } private static void data2file(Context context, byte[] w, String fileName) throws Exception{ OutputStream out = null; try{ // ファイル出力ストリームのオープン out = context.openFileOutput(fileName,Context.MODE_PRIVATE); // バイト配列の書き込み out.write(w, 0, w.length); // ファイル出力ストリームのクローズ out.close(); }catch (Exception e){ try{ if ( out != null) out.close(); }catch (Exception e2){ } throw e; } } private static byte[] file2data(Context context, String fileName) throws Exception{ int size; byte[] w = new byte[1024]; InputStream in = null; ByteArrayOutputStream out = null; try{ // ファイル入力ストリームのオープン in = context.openFileInput(fileName); // バイト配列の読み込み out = new ByteArrayOutputStream(); while(true){ size = in.read(w); if(size <= 0) break; out.write(w,0,w.length); } out.close(); // ファイル入力ストリームのクローズ in.close(); // ByteArrayOutputStreamオブジェクトのバイト配列 return out.toByteArray(); }catch (Exception e){ try{ if(in != null) in.close(); if(out != null) out.close(); }catch (Exception e2){ } throw e; } } }
データベースの読み書き
public class SQLiteEx extends Activity implements View.OnClickListener { private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT; private final static int MP = LinearLayout.LayoutParams.MATCH_PARENT; private final static String TAG_WRITE = "write"; private final static String TAG_READ = "read"; private final static String DB_NAME = "test.db"; private final static String DB_TABLE = "test"; private final static int DB_VERSION = 1; private EditText editText; private SQLiteDatabase db; //データベースオブジェクト @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.WHITE); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); editText = new EditText(this); editText.setText(""); editText.setLayoutParams(new LinearLayout.LayoutParams(MP, WC)); layout.addView(editText); layout.addView(makeButton("書き込み", TAG_WRITE)); layout.addView(makeButton("読み込み", TAG_READ)); // データベースオブジェクトの取得 DBHelper dbHelper = new DBHelper(this); db = dbHelper.getWritableDatabase(); } // ボタン作成 private Button makeButton(String text, String tag) { Button button = new Button(this); button.setText(text); button.setTag(tag); button.setOnClickListener(this); button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC)); return button; } @Override public void onClick(View v) { String tag = (String)v.getTag(); // DBへの書き込み if(TAG_WRITE.equals(tag)){ try{ String str = editText.getText().toString(); writeDB(str); }catch (Exception e) { editText.setText("書き込み失敗しました"); } // DBからの読み込み }else if(TAG_READ.equals(tag)){ try{ String str = readDB(); editText.setText(str); }catch (Exception e){ editText.setText("読み込み失敗しました"); } } } // データベースへの書き込み private void writeDB(String info) throws Exception{ ContentValues values = new ContentValues(); values.put("id", "0"); values.put("info", info); int column = db.update(DB_TABLE,values,null,null); if ( column == 0) db.insert(DB_TABLE,"",values); } // データベースからの読み込み private String readDB() throws Exception{ Cursor c = db.query(DB_TABLE, new String[]{"id", "info"}, "id='0'", null, null, null, null); if(c.getCount() == 0) throw new Exception(); c.moveToFirst(); String str = c.getString(1); c.close(); return str; } //データベースヘルパーの定義 private static class DBHelper extends SQLiteOpenHelper{ public DBHelper(Context context){ super(context,DB_NAME,null,DB_VERSION); } // データベースの生成、データベース生成時に呼ばれる @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists " + DB_TABLE +"(id text primary key, info text)"); } // データベースのアップグレード、データベースアップグレード時に呼ばれる @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists " + DB_TABLE); onCreate(db); } } }
プリファレンスの読み書き
@Override public void onClick(View v) { String tag = (String)v.getTag(); // プリファレンスオブジェクトの取得 SharedPreferences pref = getSharedPreferences("PreferernceEx",MODE_PRIVATE); // プリファレンスへの書き込み if(TAG_WRITE.equals(tag)){ SharedPreferences.Editor editor = pref.edit(); editor.putString("text", editText.getText().toString()); editor.commit(); // プリファレンスからの読み込み }else if(TAG_READ.equals(tag)){ editText.setText(pref.getString("text", "")); } }
システムクリップボード
public class ClipboardEx extends Activity implements View.OnClickListener { private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT; private final static String TAG_TEXT_COPY = "text_copy"; private final static String TAG_TEXT_PASTE = "text_paste"; private final static String TAG_URI_COPY = "uri_copy"; private final static String TAG_URI_PASTE = "uri_paste"; private final static String TAG_INTENT_COPY = "intent_copy"; private final static String TAG_INTENT_PASTE = "intent_paste"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.WHITE); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); layout.addView(makeButton("テキストのコピー", TAG_TEXT_COPY)); layout.addView(makeButton("テキストのペースト", TAG_TEXT_PASTE)); layout.addView(makeButton("URIのコピー", TAG_URI_COPY)); layout.addView(makeButton("URIのペースト", TAG_URI_PASTE)); layout.addView(makeButton("インテントのコピー", TAG_INTENT_COPY)); layout.addView(makeButton("インテントのペースト",TAG_INTENT_PASTE)); } // ボタン作成 private Button makeButton(String text, String tag) { Button button = new Button(this); button.setText(text); button.setTag(tag); button.setOnClickListener(this); button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC)); return button; } @Override public void onClick(View v) { String tag = (String)v.getTag(); try{ // テキストのコピー if(TAG_TEXT_COPY.equals(tag)){ ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); ClipData cd = ClipData.newPlainText("text text","This is TEST"); cm.setPrimaryClip(cd); // テキストのペースト }else if(TAG_TEXT_PASTE.equals(tag)){ ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); String str = cm.getPrimaryClip().getItemAt(0).getText().toString(); toast(str); // URIのコピー }else if(TAG_URI_COPY.equals(tag)){ ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); ClipData cd = ClipData.newUri(getContentResolver(), "test uri", Uri.parse("http://python.org")); cm.setPrimaryClip(cd); // URIのペースト }else if(TAG_URI_PASTE.equals(tag)){ ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); Uri uri = cm.getPrimaryClip().getItemAt(0).getUri(); toast(uri.toString()); // インテントのコピー }else if(TAG_INTENT_COPY.equals(tag)){ ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ClipData cd = ClipData.newIntent("test intent",intent); cm.setPrimaryClip(cd); // インテントのペースト }else if(TAG_INTENT_PASTE.equals(tag)){ ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); Intent intent = cm.getPrimaryClip().getItemAt(0).getIntent(); startActivity(intent); } }catch (Exception e){ toast(e.getMessage()); } } private void toast(String text){ if(text == null) text = ""; Toast.makeText(this,text,Toast.LENGTH_LONG).show(); } }
参考文献
Androidプログラミングバイブル SDK5/4対応 (smart phone programming bible)
- 作者: 布留川英一
- 出版社/メーカー: ソシム
- 発売日: 2015/01/26
- メディア: 単行本
- この商品を含むブログ (2件) を見る