我在寻求帮助。我上过Android编程课,我们需要构建一个应用程序,将传感器数据(加速度计、陀螺仪和磁场)放入数组中,并显示值。不幸的是,我只知道基本的Java,我觉得有些逻辑卡住了。
我通过显示传感器的实时值启动了我的应用程序。我能做到,但太吵了,不准确。因此,我试图将传感器生成的值存储到一个数组中,然后在文本视图中显示这些值。现在,当我运行应用程序时,它只会崩溃。我不确定我遗漏了什么,但可能是一些Java逻辑。总之,我已经正确设置了UI。我有主要的活动。java和单独的java类来收集使用getter和setter设置的传感器数据。
Mainactive代码:
package com.example.servicesassignmentone;
import androidx.appcompat.app.AppCompatActivity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements SensorEventListener{
private Button myButton;
Handler myHandler = new Handler();
private TextView accelerometerX, accelerometerY, accelerometerZ;
private SensorManager sensorManager;
private Sensor sensorAccelerometer;
private boolean sensorAccelerometerSet = false;
private List<Accelerometer> accelerometerListValues = new ArrayList<Accelerometer>();
private TextView gyroscopeX, gyroscopeY, gyroscopeZ;
private Sensor sensorGyroscope;
private boolean sensorGyroscopeSet = false;
private List<Gyroscope> gyroscopeLastValues = new ArrayList<Gyroscope>();
private TextView magFieldX, magFieldY, magFieldZ;
private Sensor sensorMagField;
private boolean sensorMagFieldSet = false;
private List<MagField> magFieldLastValues = new ArrayList<MagField>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// button and UI initialization
myButton = (Button) findViewById(R.id.myButton);
//Accelerometer
accelerometerX = (TextView) findViewById(R.id.textViewAccX);
accelerometerY = (TextView) findViewById(R.id.textViewAccY);
accelerometerZ = (TextView) findViewById(R.id.textViewAccZ);
//Gyroscope
gyroscopeX = (TextView) findViewById(R.id.textViewGyroX);
gyroscopeY = (TextView) findViewById(R.id.textViewGyroY);
gyroscopeZ = (TextView) findViewById(R.id.textViewGyroZ);
//Magnetic Field
magFieldX = (TextView) findViewById(R.id.textViewMagX);
magFieldY = (TextView) findViewById(R.id.textViewMagY);
magFieldZ = (TextView) findViewById(R.id.textViewMagZ);
// initializing the sensor manager
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// initializing the different sensors
sensorAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
sensorMagField = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.myButton:
sensorManager.registerListener((SensorEventListener) MainActivity.this, sensorAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener((SensorEventListener) MainActivity.this, sensorGyroscope, SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener((SensorEventListener) MainActivity.this, sensorMagField, SensorManager.SENSOR_DELAY_FASTEST);
break;
}
}
});
}
@Override
protected void onResume() {
super.onResume();
sensorAccelerometerSet = false;
sensorGyroscopeSet = false;
sensorMagFieldSet = false;
sensorManager.registerListener((SensorEventListener) this, sensorAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener((SensorEventListener) this, sensorGyroscope, SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener((SensorEventListener) this, sensorMagField, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener((SensorEventListener) this);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
//Using the arraylist
Float accelerValuesX, accelerValuesY, accelerValuesZ;
Float gyroValuesX, gyroValuesY, gyroValuesZ;
Float magValuesX, magValuesY, magValuesZ;
//if (accelerometerListValues.size() >= 500 && gyroscopeLastValues.size() >= 500 && magFieldLastValues.size() >= 500) {
//}
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accelerValuesX = sensorEvent.values[0];
accelerValuesY = sensorEvent.values[1];
accelerValuesZ = sensorEvent.values[2];
accelerometerListValues.add(new Accelerometer(accelerValuesX, accelerValuesY, accelerValuesZ));
for (int i = 0; i < accelerometerListValues.size(); i++) {
Accelerometer output = accelerometerListValues.get(i);
accelerometerX.setText((CharSequence) output);
}
}
if (sensorEvent.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
gyroValuesX = sensorEvent.values[0];
gyroValuesY = sensorEvent.values[1];
gyroValuesZ = sensorEvent.values[2];
gyroscopeLastValues.add(new Gyroscope(gyroValuesX, gyroValuesY, gyroValuesZ));
for (int i = 0; i < gyroscopeLastValues.size(); i++) {
Gyroscope output = gyroscopeLastValues.get(i);
gyroscopeX.setText((CharSequence) output);
}
}
if (sensorEvent.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
magValuesX = sensorEvent.values[0];
magValuesY = sensorEvent.values[1];
magValuesZ = sensorEvent.values[2];
magFieldLastValues.add(new MagField(magValuesX, magValuesY, magValuesZ));
for (int i = 0; i < magFieldLastValues.size(); i++) {
MagField output = magFieldLastValues.get(i);
magFieldX.setText((CharSequence) output);
}
}
从您提供的调试日志
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.servicesassignmentone, PID: 28780 java.lang.ClassCastException: com.example.servicesassignmentone.Accelerometer cannot be cast to java.lang.CharSequence
问题发生在MainActivity.java:120(第120行)
for (int i = 0; i < accelerometerListValues.size(); i++) {
Accelerometer output = accelerometerListValues.get(i);
accelerometerX.setText((CharSequence) output); // Program crash at this line
}
变量输出是一个加速计,但您要将其转换为字符序列。我不知道该怎么做。实例服务SignmentOne。加速计看起来好像没有显示代码,但我相信可能有一种方法可以让您访问它的值。
运动传感器包含一个 3轴陀螺仪 以及一个 3轴加速度计 ,具备能够检测物体的运动姿态,加速度,以及震动强度。 坐标轴及角度方向定义 坐标轴 角度英文名 角度中文名 角度范围 X Pitch 俯仰角 -180~180° Y Roll 翻滚角 -90~90° Z Yaw 偏航角 -180~180° 原理介绍 如果你在互联网上直接搜索陀螺仪,你将很可能得到如下图片: 这是一种基于角动量守恒的理论,用来感
运动传感器包含一个 3轴陀螺仪 以及一个 3轴加速度计 ,具备能够检测物体的运动姿态,加速度,以及震动强度。 坐标轴及角度方向定义 坐标轴 角度英文名 角度中文名 角度范围 X Pitch 俯仰角 -180~180° Y Roll 翻滚角 -90~90° Z Yaw 偏航角 -180~180° 原理介绍 如果你在互联网上直接搜索陀螺仪,你将很可能得到如下图片: 这是一种基于角动量守恒的理论,用来感
如果您的 Polar Verity Sense 传感器出现问题,可以将传感器重置为出厂设置。请注意,将传感器重置为出厂设置,会将传感器上的所有个人数据和设置清空,您需要重新设置传感器才可供您个人使用。您从传感器同步至 Flow 账户上的所有数据均安全。 要将传感器重置为出厂设置 进入 flow.polar.com/start,下载 Polar FlowSync 数据传输软件,并将其安装到您的电脑上
光环板可以连接 mbuild 的 热运动传感器 模块进行编程。 1. 热运动传感器(1)检测到热运动? 如果指定热运动传感器检测到热运动,报告条件成立。 示例 按下光环板的按钮,如果热运动传感器1检测到热运动,光环板的LED灯环会显示红色。 2. 热运动传感器(1)检测到热运动的次数 报告指定热运动传感器检测到热运动的次数。 示例 按下光环板的按钮,如果热运动传感器1检测到热运动的次数大于16次,
热运动传感器能够检测环境中是否有人或恒温动物经过。 原理介绍 热运动传感器使用了人体热释电红外传感器作为核心元器件。人体正常温度为37℃,对应10μm波长的红外光,热运动传感器正是通过检测环境中10μm波长红外光的变化,进而判断环境中是否有人体或附近温度热源的运动的。 为了尽可能敏锐地感知环境中的10μm红外光变化,热运动传感器使用了菲涅尔滤光片对红外光做了汇聚,使得传感器能够尽可能多地接受环境中
热运动传感器能够检测环境中是否有人或恒温动物经过。 原理介绍 热运动传感器使用了人体热释电红外传感器作为核心元器件。人体正常温度为37℃,对应10μm波长的红外光,热运动传感器正是通过检测环境中10μm波长红外光的变化,进而判断环境中是否有人体或附近温度热源的运动的。 为了尽可能敏锐地感知环境中的10μm红外光变化,热运动传感器使用了菲涅尔滤光片对红外光做了汇聚,使得传感器能够尽可能多地接受环境中