Java 程序在写入文件时崩溃

Java 程序在写入文件时崩溃,java,android,file,Java,Android,File,我正试图编写一些代码来跟踪android设备上的一些生物特征。 每次按下第四个按钮时,程序应输出: size1 size2 size3 size4, pressure1 pressure2 pressure3 pressure4, touchduration1 touchduration2 touchduration3 touchduration4, betweentime1 betweentime2 betweentime3; 但是由于某种原因,当它没有插入计算机,我尝试自己运行它时,当你

我正试图编写一些代码来跟踪android设备上的一些生物特征。
每次按下第四个按钮时,程序应输出:

size1 size2 size3 size4, pressure1 pressure2 pressure3 pressure4, touchduration1 touchduration2 touchduration3 touchduration4, betweentime1 betweentime2 betweentime3; 
但是由于某种原因,当它没有插入计算机,我尝试自己运行它时,当你第一次按下第四个按钮时,程序崩溃了

我已经调试了一段时间,但我不明白为什么它不工作。
我希望有一双新的眼睛能帮助我走出困境

package com.example.joe.myapplication;

import android.content.Context;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;

import java.io.File;
import java.io.FileOutputStream;
import java.util.*;
import android.app.Activity;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.*;
import android.widget.EditText;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;



public class MainActivity extends ActionBarActivity {



    /*long pressTime1 = 0;
    long releaseTime1 = 0;
    long pressTime2 = 0;
    long releaseTime2 = 0;
    long pressTime3 = 0;
    long releaseTime3 = 0;
    long pressTime = 0;
    long releaseTime = 0;*/
    long pressTime = 0;
    long releaseTime = 0;
    long pressDuration = 0;
    long betweenDuration = 0;
    int count = 0;
    int count2 = 0;
    float [] array = new float [10];

    double[] sizeArray = new double[4];
    double[] pressureArray  = new double[4];
    long[] pressTimeArray = new long[4];
    long[] betweenTimeArray = new long[4];
    int i = 0; //button number
    int session_number = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        //Sets the spinner

        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        // Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.Sessions, android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        spinner.setAdapter(adapter);

        final String Text = spinner.getSelectedItem().toString();

        // get EditText by id
        EditText inputTxt = (EditText) findViewById(R.id.editText);

// Store EditText in Variable

       final String str = inputTxt.getText().toString();


        //Sets the buttons

        Button Button1 = (Button)findViewById(R.id.button);
        Button Button2 = (Button)findViewById(R.id.button2);
        Button Button3 = (Button)findViewById(R.id.button3);
        Button Button4 = (Button)findViewById(R.id.button4);



        Button1.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN ) {


                    getSizeandPressure(event);
                    pressTime = System.nanoTime();

                }

                if(event.getAction() == MotionEvent.ACTION_UP) {
                    releaseTime = System.nanoTime();
                    pressDuration = releaseTime - pressTime;
                    pressTimeArray[i] = pressDuration;
                    i++;
                    Log.d("Press duration", "time: " + pressDuration);
                }
             return false;
            }
        });

        Button2.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN ) {

                    getSizeandPressure(event);
                    pressTime = System.nanoTime();
                    betweenDuration = pressTime - releaseTime;
                    betweenTimeArray[i] = betweenDuration;

                    Log.d("Time between B1 and B2", "time: " + betweenDuration);
                }

                if(event.getAction() == MotionEvent.ACTION_UP) {
                    releaseTime = System.nanoTime();
                    pressDuration = releaseTime - pressTime;
                    pressTimeArray[i] = pressDuration;
                    i++;
                    Log.d("Press duration", "time: " + pressDuration);
                }
                return false;
            }
        });

        Button3.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN ) {

                    getSizeandPressure(event);
                    pressTime = System.nanoTime();
                    betweenDuration = pressTime - releaseTime;
                    betweenTimeArray[i] = betweenDuration;

                    Log.d("Time between B2 and B3", "time: " + betweenDuration);
                }

                if(event.getAction() == MotionEvent.ACTION_UP) {
                    releaseTime = System.nanoTime();
                    pressDuration = releaseTime - pressTime;
                    pressTimeArray[i] = pressDuration;
                    i++;
                    Log.d("Press duration", "time: " + pressDuration);
                }
                return false;
            }
        });

        Button4.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN ) {

                    getSizeandPressure(event);
                    pressTime = System.nanoTime();
                    betweenDuration = pressTime - releaseTime;
                    betweenTimeArray[i] = betweenDuration;

                    Log.d("Time between B3 and B4", "time: " + betweenDuration);
                }

                if(event.getAction() == MotionEvent.ACTION_UP) {
                    releaseTime = System.nanoTime();
                    pressDuration = releaseTime - pressTime;
                    pressTimeArray[i] = pressDuration;
                    i++;
                    session_number++;
                    Log.d("Press duration", "time: " + pressDuration);

                    // Writes the data to a text document stored in documents on the phone.

                    String filename = str + "_" + Text; //username

                    String string = sizeArray[0] + " " + sizeArray[1] + " " + sizeArray[2] + " " + sizeArray[3] + ", " +
                                    pressureArray[0]  + " " + pressureArray[1]  + " " + pressureArray[2]  + " " + pressureArray[3]  + ", " +
                                    pressTimeArray[0]  + " " +pressTimeArray[1]  + " " + pressTimeArray[2]  + " " + pressTimeArray[3] + ", " +
                                    betweenTimeArray[0]  + " " + betweenTimeArray[1]  + " " + betweenTimeArray[2]  + ";" + "\n";
                    if(isExternalStorageWritable())
                    {
                        File file = getAlbumStorageDir(filename);

                        if (file.exists ()) file.delete ();
                        try {
                            FileOutputStream outputStream = new FileOutputStream(file);
                            outputStream = openFileOutput(filename, Context.MODE_PRIVATE); //The output Stead!
                            outputStream.write(string.getBytes());
                            if(10 == session_number)
                            {
                               outputStream.close();
                            }

                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    i = 0;
                }

                return false;
            }
        });






    }


    @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 getSizeandPressure(MotionEvent e)
    {
        float size = e.getSize();
        float pressure = e.getPressure();
        sizeArray[i] = size;
        pressureArray[i] = pressure;

        Log.d("Button_", "Size: " + size + " Pressure: " + pressure);


    }


    /* Checks if external storage is available for read and write */
    public boolean isExternalStorageWritable(){
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

    public File getAlbumStorageDir(String albumName) {
        // Get the directory for the user's public pictures directory.
        File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_DOCUMENTS), albumName);
        if (!file.mkdirs()) {
            Log.e("LOG_TAG", "Directory not created");
        }
        return file;
    }
}
package com.example.joe.myapplication;
导入android.content.Context;
导入android.os.Environment;
导入android.support.v7.app.ActionBarActivity;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.util.*;
导入android.app.Activity;
导入android.inputmethodservice.Keyboard;
导入android.inputmethodservice.KeyboardView;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.KeyEvent;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.*;
导入android.widget.EditText;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnTouchListener;
公共类MainActivity扩展了ActionBarActivity{
/*长按时间1=0;
长释放时间1=0;
长按时间2=0;
长释放时间2=0;
长按时间3=0;
长释放时间3=0;
长按时间=0;
长释放时间=0*/
长按时间=0;
长释放时间=0;
长按持续时间=0;
长介电常数=0;
整数计数=0;
int count2=0;
float[]数组=新的float[10];
double[]SizerRay=新的double[4];
double[]pressureArray=新的double[4];
long[]pressTimeArray=新长[4];
long[]betweentimerary=新long[4];
int i=0;//按钮编号
int session_number=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置微调器
微调器微调器=(微调器)findViewById(R.id.Spinner);
//使用字符串数组和默认微调器布局创建ArrayAdapter
ArrayAdapter=ArrayAdapter.createFromResource(此,
R.array.Sessions、android.R.layout.simple\u微调器\u项);
//指定显示选项列表时要使用的布局
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
//将适配器应用于微调器
旋转器。设置适配器(适配器);
最后一个字符串Text=spinner.getSelectedItem().toString();
//按id获取编辑文本
EditText InputText=(EditText)findViewById(R.id.EditText);
//将编辑文本存储在变量中
最后一个字符串str=inputxt.getText().toString();
//设置按钮
按钮Button1=(按钮)findViewById(R.id.Button);
Button Button2=(按钮)findViewById(R.id.Button2);
Button Button3=(Button)findViewById(R.id.Button3);
Button Button4=(Button)findViewById(R.id.Button4);
Button1.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
getSizeandPressure(事件);
按time=System.nanoTime();
}
if(event.getAction()==MotionEvent.ACTION\u UP){
releaseTime=System.nanoTime();
按持续时间=释放时间-按时间;
按时间数组[i]=按持续时间;
i++;
Log.d(“按下持续时间”,“时间:”+按下持续时间);
}
返回false;
}
});
Button2.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
getSizeandPressure(事件);
按time=System.nanoTime();
betweenDuration=按时间-释放时间;
中间层[i]=中间层;
Log.d(“B1和B2之间的时间”,“时间:+间隔时间”);
}
if(event.getAction()==MotionEvent.ACTION\u UP){
releaseTime=System.nanoTime();
按持续时间=释放时间-按时间;
按时间数组[i]=按持续时间;
i++;
Log.d(“按下持续时间”,“时间:”+按下持续时间);
}
返回false;
}
});
Button3.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
getSizeandPressure(事件);
按time=System.nanoTime();
betweenDuration=按时间-释放时间;
中间层[i]=中间层;
Log.d(“B2和B3之间的时间”,“时间:+间隔时间”);
}
if(event.getAction()==MotionEvent.ACTION\u UP){
releaseTime=System.nanoTime();
按持续时间=释放时间-按时间;
按时间数组[i]=按持续时间;
i++;
Log.d(“按下持续时间”,“时间:”+按下持续时间);
}
返回false;
}
});
Button4.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
getSizeandPressure(事件);
公共关系
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />