出力場所として、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 に権限の記述の必要無いプライベートな書き込みで情報を収集する






