Java 无法使用ApachePOI android studio将连续数据写入/记录到.xls工作表

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

嗨,我现在正在做我最后一年的项目。。为此,我需要“将传感器的连续数据从TextView记录到.xls表”。为此,我使用ApachePOI java库,它允许您创建excel工作簿和工作表等。 问题是我的代码能够成功地创建图纸。但当我试图记录加速度计传感器的变化值(让我们仅将加速度计作为讨论对象)并将其写入文件时,问题就出现了,只需点击一个按钮。 这是我的代码,来自android studio项目的.java文件

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