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