出力場所として、USB 参照できる場所にフォルダを作成してその中に CSV ファイルを書き込むようにします。おそらく最新の CSV を USB 経由で確認するには、Android 本体を再起動する必要があると思いますが、パッケージ内部に作成するといろいろ面倒なので、こうした上で Android Device Monitor から pull で 取り出すのがいいと思います。
private String okhttp_folder; private String[] columnNames; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // USB から参照可能な場所にフォルダを作成 // 但し、更新直後のデータのアクセスは、Device Monitor // USB からの場合は Device を再起動 okhttp_folder = Environment.getExternalStorageDirectory().getPath() + "/okhttp"; File file = new File(okhttp_folder); // ディレクトリ初期作成 if (!file.exists()) { if (file.mkdir() == false) { Log.i("lightbox", "ディレクトリを作成できませんでした"); } } Button button = (Button) MainActivity.this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { writeCsv("image_data.csv"); } }); }
CSV ファイルを作成しやすいよう(カンマの付加を単純にする為)に、固定で row_no を先頭に追加しています。最初に列名リストを取得していますが、この際、カーソルを取得するだけで取り出し可能です。データ部分は moveToFirst と moveToNext が必要ですが、一行で実行するために三項演算子を使用しています(初回のみ null で以降 true か false)。 結果の内容を Excel で開いた様子
private void writeCsv( String filename ) { ContentResolver contentResolver = getContentResolver(); Uri listing = MediaStore.Images.Media.getContentUri("external"); Log.i("lightbox", "Content URI : " + listing.toString()); // ▲ content://media/external/images/media Cursor cursor; cursor = contentResolver.query(listing, null, null, null, null); // 行バッファ StringBuilder builder = new StringBuilder(); // 列名一覧 String[] columnNames = cursor.getColumnNames(); /* _id _data _size _display_name mime_type title date_added date_modified description picasa_id isprivate latitude longitude datetaken orientation mini_thumb_magic bucket_id bucket_display_name width height */ // CSV データを作成 builder.append("row_no"); for ( int i = 0; i < columnNames.length; i++ ) { builder.append(","); builder.append(columnNames[i]); } builder.append("\n"); cursor.close(); try { FileOutputStream stream = new FileOutputStream(new File(okhttp_folder + "/" + filename)); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stream)); cursor = contentResolver.query(listing, null, null, null, null); int columnCount = cursor.getColumnCount(); int rowCount = 0; // 画像のデータを取得 Boolean isData = null; while ( isData == null ? (isData = cursor.moveToFirst()) : (isData = cursor.moveToNext()) ) { rowCount++; builder.append(rowCount); for ( int i = 0; i < columnCount; i++ ) { builder.append(","); builder.append(cursor.getString(i)); } builder.append("\n"); } // 全てを書込み writer.write(builder.toString()); writer.flush(); writer.close(); Log.i("lightbox","CSV出力完了"); } catch (Exception e) { e.printStackTrace(); } }
|
【2017 Android Studioの最新記事】
- 別に納品するわけでは無いので、Android の ListView のカスタマイズなんてこれで十分でしょ / TestArrayAdapter バージョン2
- Java : Class 構造より、update 文を作成する
- ViewSwitcher を使用した2画面アプリ (5) : SQLiteデータを更新する
- ViewSwitcher を使用した2画面アプリ (4) : SQLiteデータをインポートしてリストビューに表示する
- Android Studio にインポートして使用する SQLite データベースを MDB より作成する VBScript
- ViewSwitcher を使用した2画面アプリ (3) : 画面部分の作成と画面切り替えテスト『画面をコントロールする Helper クラスの作成』
- ViewSwitcher を使用した2画面アプリ (2) : 画面部分の作成と画面切り替えテスト『画面の作成』
- ViewSwitcher を使用した2画面アプリ (1) : 画面部分の作成と画面切り替えテスト『メニューの作成』
- OkHttp を使用した HttpAccess クラスで Web 上の 画像をダウンロードして表示するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の PHP アプリに対してファイルをアップロードするテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の掲示板に投稿(POST)するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上のデータを取得(GET)して ListView を表示するテンプレート
- Okhttp を使用した、GET、POST、ファイルアップロードを楽に実装できる HttpAccess クラス
- Android の assets フォルダーに保存した 400x320 の画像ファイルの扱い
- Android の drawable フォルダーに保存した 400x320 の画像ファイルの6種類の扱いと Density
- Android での保存用テキストデータの扱いを okio で簡素化する
- Android 6.0 : テストの為の Runtime Permission の対応を自動化するテンプレート
- Android Studio : Runtime Permission 等の裏方作業を MainActivity にさせて、本来の処理は継承したサブクラスで行う( カメラを呼び出して画像を保存させ、I..
- Android 6.0 エミュレータで 複数の Runtime Permission の対応を簡潔に吸収するクラス( CheckMyPermission )
- Android 6.0 の Runtime Permission に対応する前に、AndroidManifest.xml に権限の記述の必要無いプライベートな書き込みで情報を収集する