質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

23880閲覧

AndroidアプリでのCSV出力について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/01/18 14:55

###前提・実現したいこと
Androidアプリで、加速度センサーの値をCSV出力したいです。
最終的にはグラフにしたりしたいのですが、今はとりあえず

“アプリでCSVファイルを出力”出来ればいいです。

###発生している問題・エラーメッセージ
エラーはなく、実機上でセンサーの値を表示してはくれるのですが
(アプリは動作しているのですが)
CSVファイルが出力されません。

ここで解決策を教えていただいたら、文字列部分にセンサーの値を入れて
挑戦してみたいと考えています。

For文があるのは、センサーの値を配列に入れて、
それを出力しようと思っていた時期があったからです。

###ソースコード

Java

1import android.os.Environment; 2import android.support.v7.app.AppCompatActivity; 3import android.os.Bundle; 4import android.hardware.Sensor; 5import android.hardware.SensorEvent; 6import android.hardware.SensorEventListener; 7import android.hardware.SensorManager; 8import android.os.Bundle; 9import android.support.v7.app.AppCompatActivity; 10import android.util.Log; 11import android.view.View; 12import android.widget.Button; 13import android.widget.TextView; 14import android.widget.Toast; 15import android.view.View.OnClickListener; 16import java.io.BufferedWriter; 17import java.io.FileWriter; 18import java.io.IOException; 19import java.io.OutputStream; 20import java.io.OutputStreamWriter; 21import java.io.PrintWriter; 22 23public class MainActivity extends AppCompatActivity implements SensorEventListener { 24 private Sensor accSensor; 25 private TextView mX; 26 private TextView mY; 27 private TextView mZ; 28 private SensorManager manager; 29 public int button_flag = 0; 30 31 32 public void onAccuracyChanged(Sensor sensor, int n) { 33 } 34 35 @Override 36 protected void onCreate(Bundle savedInstanceState) { 37 super.onCreate(savedInstanceState); 38 setContentView(R.layout.activity_main); 39 manager = (SensorManager)this.getSystemService(SENSOR_SERVICE); 40 accSensor = this.manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 41 Button start_btn = (Button) findViewById(R.id.button); 42 Button stop_btn = (Button) findViewById(R.id.button2); 43 44 start_btn.setOnClickListener(new View.OnClickListener() { 45 @Override 46 public void onClick(View v) { 47 button_flag = 1; 48 } 49 }); 50 51 stop_btn.setOnClickListener(new View.OnClickListener() { 52 @Override 53 public void onClick(View v) { 54 button_flag = 0; 55 } 56 }); 57 58 mX = (TextView)this.findViewById(R.id.textView); 59 mY = (TextView)this.findViewById(R.id.textView4); 60 mZ = (TextView)this.findViewById(R.id.textView6); 61 62 try { 63 //出力先を作成する 64 FileWriter fw = new FileWriter(Environment.getDataDirectory().getPath()+"test.csv", false); 65 PrintWriter pw = new PrintWriter(new BufferedWriter(fw)); 66 67 //内容を指定する 68 pw.print("あ"); 69 pw.print(","); 70 pw.print("い"); 71 pw.println(); 72 73 pw.print("01"); 74 pw.print(","); 75 pw.print("02"); 76 pw.println(); 77 78 //ファイルに書き出す 79 pw.close(); 80 81 //終了メッセージを画面に出力する 82 System.out.println("出力が完了しました。"); 83 84 } catch (IOException ex) { 85 //例外時処理 86 ex.printStackTrace(); 87 } 88 89 } 90 91 92 @Override 93 protected void onPause() { 94 super.onPause(); 95 this.manager.unregisterListener((SensorEventListener)this, this.accSensor); 96 } 97 98 protected void onResume() { 99 super.onResume(); 100 this.manager.registerListener((SensorEventListener) this, this.accSensor, 0); 101 } 102 103 public void onSensorChanged(SensorEvent sensorEvent) { 104 if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 105 if(button_flag==1){ 106 int[] [] arrn = new int[3] [100]; 107 for (int i = 1; i <= arrn.length; i++) { 108 Log.d("SENSOR_DATA", "TYPE_ACCELEROMETER1 = " + String.valueOf(sensorEvent.values[0])); 109 Log.d("SENSOR_DATA", "TYPE_ACCELEROMETER2 = " + String.valueOf(sensorEvent.values[1])); 110 Log.d("SENSOR_DATA", "TYPE_ACCELEROMETER3 = " + String.valueOf(sensorEvent.values[2])); 111 112 mX.setText("加速度センサーX:" + String.valueOf(sensorEvent.values[0])); 113 mY.setText("加速度センサーY:" + String.valueOf(sensorEvent.values[1])); 114 mZ.setText("加速度センサーZ:" + String.valueOf(sensorEvent.values[2])); 115 } 116 }else{ 117 mX.setText("止まっていますX"); 118 mY.setText("止まっていますY"); 119 mZ.setText("止まっていますZ"); 120 } 121 } 122 } 123} 124

###補足情報(言語/FW/ツール等のバージョンなど)
Android studio 1.5で、実機はXPERIA Z3c(SO-02G)です。
パソコンはwindoiws7、スマホはAndroid4.4です。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Java

1Environment.getDataDirectory().getPath()+"test.csv"

上記の箇所ですが。このパスが怪しいです。

Java

1Environment.getDataDirectory().getPath()+"/test.csv"

上記のようにしてみてはどうでしょうか。

また、ログキャットのログも追記してもらえないでしょうか。

投稿2016/01/18 15:01

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/19 00:40

前回に引き続き、ありがとうございます。 パスを変更してみましたが、ファイルは出力されていませんでした。 『内部ストレージ』のルートディレクトリですよね? ログキャットは以下の通りです。 ###ログキャット ``` 01-19 09:05:01.809 16124-16124/? D/dalvikvm: Late-enabling CheckJNI 01-19 09:05:01.879 16124-16124/com.example.myapp05 W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;) 01-19 09:05:01.879 16124-16124/com.example.myapp05 I/dalvikvm: Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested 01-19 09:05:01.879 16124-16124/com.example.myapp05 W/dalvikvm: VFY: unable to resolve interface method 14521: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z 01-19 09:05:01.879 16124-16124/com.example.myapp05 D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002 01-19 09:05:01.879 16124-16124/com.example.myapp05 I/dalvikvm: Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode 01-19 09:05:01.879 16124-16124/com.example.myapp05 W/dalvikvm: VFY: unable to resolve interface method 14525: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode; 01-19 09:05:01.879 16124-16124/com.example.myapp05 D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002 01-19 09:05:01.919 16124-16124/com.example.myapp05 I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations 01-19 09:05:01.919 16124-16124/com.example.myapp05 W/dalvikvm: VFY: unable to resolve virtual method 406: Landroid/content/res/TypedArray;.getChangingConfigurations ()I 01-19 09:05:01.919 16124-16124/com.example.myapp05 D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002 01-19 09:05:01.919 16124-16124/com.example.myapp05 I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType 01-19 09:05:01.919 16124-16124/com.example.myapp05 W/dalvikvm: VFY: unable to resolve virtual method 428: Landroid/content/res/TypedArray;.getType (I)I 01-19 09:05:01.919 16124-16124/com.example.myapp05 D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002 01-19 09:05:02.009 16124-16124/com.example.myapp05 W/System.err: java.io.FileNotFoundException: /data/test.csv: open failed: EACCES (Permission denied) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at libcore.io.IoBridge.open(IoBridge.java:418) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:128) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at java.io.FileWriter.<init>(FileWriter.java:96) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at com.example.myapp05.MainActivity.onCreate(MainActivity.java:68) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.app.Activity.performCreate(Activity.java:5231) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.app.ActivityThread.access$800(ActivityThread.java:144) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.os.Looper.loop(Looper.java:212) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5137) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at java.lang.reflect.Method.invokeNative(Native Method) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at java.lang.reflect.Method.invoke(Method.java:515) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:718) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at dalvik.system.NativeStart.main(Native Method) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at libcore.io.Posix.open(Native Method) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: at libcore.io.IoBridge.open(IoBridge.java:402) 01-19 09:05:02.029 16124-16124/com.example.myapp05 W/System.err: ... 18 more 01-19 09:05:02.149 16124-16124/com.example.myapp05 I/Adreno-EGL: <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: RGURRAM_AU_LINUX_ANDROID_LNX.LA.3.5.2.2_RB1.04.04.04.087.030+PATCH[ES]_msm8974_LNX.LA.3.5.2.2_RB1__release_ENGG () OpenGL ES Shader Compiler Version: E031.24.00.15 Build Date: 08/12/14 Tue Local Branch: Remote Branch: quic/LNX.LA.3.5.2.2_rb1 Local Patches: 8b00bd16f3c1d9d35a2fa902df5e679888d2b2e3 Fixes an llvm crash with mini dEQP apk 38bad22e162dead4e008444520a0144c78a347bd Fixes a potential dEQP crash. ce345e1c45c2ae2d1fb2cb125c8d2574f1af5f95 Rev 01-19 09:05:02.239 16124-16124/com.example.myapp05 D/OpenGLRenderer: Enabling debug mode 0 01-19 09:05:02.479 16124-16124/com.example.myapp05 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@431e6a10 time:7793707 01-19 09:05:03.589 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER1 = 0.31530762 01-19 09:05:03.589 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER2 = 0.2709961 01-19 09:05:03.589 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER3 = 9.4449005 01-19 09:05:03.589 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER1 = 0.31530762 01-19 09:05:03.589 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER2 = 0.2709961 01-19 09:05:03.589 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER3 = 9.4449005 (中略) 01-19 09:05:06.839 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER1 = 0.30506897 01-19 09:05:06.839 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER2 = 0.26792908 01-19 09:05:06.839 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER3 = 9.425735 01-19 09:05:06.839 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER1 = 0.30506897 01-19 09:05:06.859 16124-16124/com.example.myapp05 D/dalvikvm: GC_FOR_ALLOC freed 4831K, 19% free 24427K/30040K, paused 19ms, total 19ms 01-19 09:05:06.859 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER2 = 0.26792908 01-19 09:05:06.859 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER3 = 9.425735 01-19 09:05:06.859 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER1 = 0.30506897 01-19 09:05:06.859 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER2 = 0.26792908 01-19 09:05:06.859 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER3 = 9.425735 (中略) 01-19 09:05:09.859 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER1 = 0.33813477 01-19 09:05:09.859 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER2 = 0.2742157 01-19 09:05:09.859 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER3 = 9.387146 01-19 09:05:09.889 16124-16124/com.example.myapp05 D/dalvikvm: GC_FOR_ALLOC freed 5243K, 20% free 24415K/30444K, paused 27ms, total 27ms 01-19 09:05:09.889 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER1 = 0.3252716 01-19 09:05:09.889 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER2 = 0.26457214 01-19 09:05:09.889 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER3 = 9.425735 01-19 09:05:09.889 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER1 = 0.3252716 01-19 09:05:09.889 16124-16124/com.example.myapp05 D/SENSOR_DATA: TYPE_ACCELEROMETER2 = 0.26457214 (以下同じような文が続く) ```
yona

2016/01/19 00:55

システムエラーが発生しています。 READ_EXTERNAL_STORAGE権限は与えていますか?
退会済みユーザー

退会済みユーザー

2016/01/19 07:48

与えていません! どうやって与えるのですか? Android4.4だといらない、という情報も見ますが・・・
yona

2016/01/19 08:13 編集

マニフェストファイルのアプリケーションタグの外側に下記を追加してください。 <use-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <use-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 4.4から必須になったと思います。 それ以前だとリードは不要でライトは必須だったと思います。
退会済みユーザー

退会済みユーザー

2016/01/19 10:07

曖昧な質問にも丁寧に答えていただき、ありがとうございます。 マニフェストファイルをいじってもうまく出力できませんでした。 どのようなことが理由として考えられますか?
yona

2016/01/19 10:22 編集

よく見るとEnvironment.getDataDirectory()が間違っていますね。 ここはEnvironment.getExternalStorageDirectory()にするべきですね。 また、アプリケーション固有のフォルダに保存する場合はActivity.getFilesDir()を、使うときいいですね。
退会済みユーザー

退会済みユーザー

2016/01/19 10:52

無事出力されました!! ありがとうございます! ここからまた色々調整していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問