Java 无法使用ApachePOI android studio将连续数据写入/记录到.xls工作表
嗨,我现在正在做我最后一年的项目。。为此,我需要“将传感器的连续数据从TextView记录到.xls表”。为此,我使用ApachePOI java库,它允许您创建excel工作簿和工作表等。 问题是我的代码能够成功地创建图纸。但当我试图记录加速度计传感器的变化值(让我们仅将加速度计作为讨论对象)并将其写入文件时,问题就出现了,只需点击一个按钮。 这是我的代码,来自android studio项目的.java文件Java 无法使用ApachePOI android studio将连续数据写入/记录到.xls工作表,java,excel,android-studio,apache-poi,hssfworkbook,Java,Excel,Android Studio,Apache Poi,Hssfworkbook,嗨,我现在正在做我最后一年的项目。。为此,我需要“将传感器的连续数据从TextView记录到.xls表”。为此,我使用ApachePOI java库,它允许您创建excel工作簿和工作表等。 问题是我的代码能够成功地创建图纸。但当我试图记录加速度计传感器的变化值(让我们仅将加速度计作为讨论对象)并将其写入文件时,问题就出现了,只需点击一个按钮。 这是我的代码,来自android studio项目的.java文件 import android.hardware.Sensor; import and
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity implements SensorEventListener, View.OnClickListener {
public static int i = 1;
public static boolean a = false;
public static String filename;
private SensorManager sensorManager;
Sensor accelerometer, gyroscope, magnetometer;
TextView ax, ay, az, gx, gy, gz, mx, my, mz;
Button btnStart, btnStop;
Workbook workbook;
//ArrayList<String> array = new ArrayList<>();
FileOutputStream fos = null;
HSSFSheet sheet;
Row row;
int rownum = 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ax = findViewById(R.id.valueX);
ay = findViewById(R.id.valueY);
az = findViewById(R.id.valueZ);
gx = findViewById(R.id.gvalueX);
gy = findViewById(R.id.gvalueY);
gz = findViewById(R.id.gvalueZ);
mx = findViewById(R.id.mvalueX);
my = findViewById(R.id.mvalueY);
mz = findViewById(R.id.mvalueZ);
//---------------------------------------------------------------------------------------------------//
btnStart = findViewById(R.id.btnStart);
btnStop = findViewById(R.id.btnStop);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
filename = "File.xls";
//This is the file, that will be made workbook when doing "workbook.write(fos{filename..})"
workbook = new HSSFWorkbook(); //creates workbook only once when program is started
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
assert sensorManager != null;
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
gyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
registerListeners(); //a Function.
}
private void registerListeners(){
//Registering the listeners to start recording data
if (accelerometer != null) {
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
} else {
Toast.makeText(this, "Accelerometer is not supported", Toast.LENGTH_SHORT).show();
}
if (gyroscope != null) {
sensorManager.registerListener(this, gyroscope, SensorManager.SENSOR_DELAY_NORMAL);
} else {
Toast.makeText(this, "Gyroscope is not supported", Toast.LENGTH_SHORT).show();
}
if (magnetometer != null) {
sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_NORMAL);
} else {
Toast.makeText(this, "Magnetometer is not supported", Toast.LENGTH_SHORT).show();
}
}
//THIS IS THE PORTION WITH ISSUE .-.
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
Sensor sensor = sensorEvent.sensor;
if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
ax.setText(String.valueOf(sensorEvent.values[0]));
ay.setText(String.valueOf(sensorEvent.values[1]));
az.setText(String.valueOf(sensorEvent.values[2]));
}
else if (sensor.getType() == Sensor.TYPE_GYROSCOPE) {
gx.setText(String.valueOf(sensorEvent.values[0]));
gy.setText(String.valueOf(sensorEvent.values[1]));
gz.setText(String.valueOf(sensorEvent.values[2]));
}
else if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
mx.setText(String.valueOf(sensorEvent.values[0]));
my.setText(String.valueOf(sensorEvent.values[1]));
mz.setText(String.valueOf(sensorEvent.values[2]));
//Here i try to record sensor values... BUT it fails......!!!!!!!!!!!!!
if(a) {
if(row!=null) {
row = sheet.createRow(rownum); //rownum =3 (initially)
//picking accelerometer values only.
row.createCell(0).setCellValue(ax.getText().toString());
row.createCell(1).setCellValue(ay.getText().toString());
row.createCell(2).setCellValue(az.getText().toString());
}
try {
fos = openFileOutput(filename, MODE_APPEND);
((HSSFWorkbook) workbook).write(fos);
Toast.makeText(this, "Done" , Toast.LENGTH_SHORT).show();
}
catch (IOException e) {
e.printStackTrace();
}
rownum++;
}
}
}
public void onAccuracyChanged(Sensor sensor, int i) {
//leave it empty for now
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnStart:
if(createSheet()){
a = true;
}
else Toast.makeText(this, "Sheet could not be created", Toast.LENGTH_SHORT).show();
//i++;
break;
case R.id.btnStop:
a = false;
//i++;
Toast.makeText(this, "Values Recorded Successfully", Toast.LENGTH_LONG).show();
/*try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
} */
break;
}
}
private boolean createSheet() {
try{
Toast.makeText(this, " " + i, Toast.LENGTH_SHORT).show();
sheet = ((HSSFWorkbook) workbook).createSheet("Sheet_" + i);
//Toast.makeText(this, "Sheet " + i, Toast.LENGTH_SHORT).show();
Cell cell;
row = sheet.createRow(0);
cell = row.createCell(0);
cell.setCellValue("Mobile Phone Sensors Readings");
//row.createCell(0).setCellValue("Mobile Phone Sensors Readings");
row = sheet.createRow(1);
row.createCell(0).setCellValue("Accelerometer");
row.createCell(3).setCellValue("Gyroscope");
row.createCell(6).setCellValue("Magnetometer");
row = sheet.createRow(2);
row.createCell(0).setCellValue("X-Axis");
row.createCell(1).setCellValue("Y-axis");
row.createCell(2).setCellValue("Z-axis");
row.createCell(3).setCellValue("X-Axis");
row.createCell(4).setCellValue("Y-axis");
row.createCell(5).setCellValue("Z-axis");
row.createCell(6).setCellValue("X-Axis");
row.createCell(7).setCellValue("Y-axis");
row.createCell(8).setCellValue("Z-axis");
try {
fos = openFileOutput(filename, MODE_APPEND);
((HSSFWorkbook) workbook).write(fos);
}
catch (IOException e) {
e.printStackTrace();
return false;
}
} //try1 ends.
catch (Exception ex){
ex.printStackTrace();
return false;
} //catch for try1 ends.
return true;
} //createSheet function ends.
}
导入android.hardware.Sensor;
导入android.hardware.SensorEvent;
导入android.hardware.SensorEventListener;
导入android.hardware.SensorManager;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
导入org.apache.poi.hssf.usermodel.HSSFSheet;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.工作簿;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.array;
公共类MainActivity扩展AppCompatActivity实现SensorEventListener、View.OnClickListener{
公共静态int i=1;
公共静态布尔值a=false;
公共静态字符串文件名;
私人传感器管理器传感器管理器;
传感器、加速度计、陀螺仪、磁强计;
TextView ax、ay、az、gx、gy、gz、mx、my、mz;
按钮btnStart,btnStop;
工作手册;
//ArrayList数组=新的ArrayList();
FileOutputStream=null;
HSSF表;
行行;
int rownum=3;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ax=findViewById(R.id.valueX);
ay=findViewById(R.id.valueY);
az=findViewById(R.id.valueZ);
gx=findViewById(R.id.gvalueX);
gy=findViewById(R.id.G值);
gz=findViewById(R.id.gvalueZ);
mx=findViewById(R.id.mvalueX);
my=findViewById(R.id.M值);
mz=findViewById(R.id.mvalueZ);
//---------------------------------------------------------------------------------------------------//
btnStart=findviewbyd(R.id.btnStart);
btnStop=findviewbyd(R.id.btnStop);
btnStart.setOnClickListener(此);
btnStop.setOnClickListener(这个);
filename=“File.xls”;
//这是一个文件,在执行“workbook.write(fos{filename..}”时将成为工作簿
工作簿=新建HSSFWorkbook();//程序启动时只创建一次工作簿
sensorManager=(sensorManager)getSystemService(传感器服务);
断言sensorManager!=null;
加速计=sensorManager.getDefaultSensor(传感器类型\加速计);
陀螺仪=sensorManager.getDefaultSensor(传感器.TYPE_陀螺仪);
磁强计=sensorManager.getDefaultSensor(传感器类型\磁场);
registerListeners();//函数。
}
私有无效注册表侦听器(){
//注册侦听器以开始记录数据
如果(加速度计!=null){
sensorManager.registerListener(此,加速计,sensorManager.SENSOR\u延迟\u正常);
}否则{
Toast.makeText(此“加速计不受支持”,Toast.LENGTH_SHORT.show();
}
if(陀螺仪!=null){
sensorManager.registerListener(此、陀螺仪、sensorManager.SENSOR\u延迟\u正常);
}否则{
Toast.makeText(此“不支持陀螺仪”,Toast.LENGTH_SHORT.show();
}
if(磁强计!=null){
sensorManager.registerListener(此、磁强计、sensorManager.SENSOR\u延迟\u正常);
}否则{
Toast.makeText(此“磁强计不受支持”,Toast.LENGTH_SHORT.show();
}
}
//这是有问题的部分。
@凌驾
传感器更改时的公共无效(传感器事件传感器事件){
传感器=sensorEvent.Sensor;
if(sensor.getType()==sensor.TYPE\u加速计){
ax.setText(String.valueOf(sensorEvent.values[0]);
ay.setText(String.valueOf(sensorEvent.values[1]);
az.setText(String.valueOf(sensorEvent.values[2]);
}
else if(sensor.getType()==sensor.TYPE\u陀螺仪){
gx.setText(String.valueOf(sensorEvent.values[0]);
gy.setText(String.valueOf(sensorEvent.values[1]);
setText(String.valueOf(sensorEvent.values[2]);
}
else if(sensor.getType()==sensor.TYPE\u磁场){
setText(String.valueOf(sensorEvent.values[0]);
my.setText(String.valueOf(sensorEvent.values[1]);
mz.setText(String.valueOf(sensorEvent.values[2]);
//在这里,我尝试记录传感器值…但失败了。。。。。。!!!!!!!!!!!!!
如果(a){
如果(行!=null){
row=sheet.createRow(rownum);//rownum=3(最初)
//仅拾取加速度计值。
row.createCell(0.setCellValue(ax.getText().toString());
row.createCell(1.setCellValue(ay.getText().toString());
row.createCell(2.setCellValue(az.getText().toString());
}
试一试{
fos=openFileOutput(文件名,模式\追加);
((HSSF工作手册)工作簿)。编写(fos);
Toast.makeText(这个“完成”,Toast.LENGTH_SHORT).show();
}
捕获(IOE异常){
e、 printStackTrace();
}
rownum++;
}
}
}
精度更改时的公共无效(传感器se