代码错误:java.lang.IllegalStateException:无法为android执行方法:onClick
我已经做了一个android项目,它将启动一个加速计传感器,并将传感器的x、y、z数据存储在一个文件中。我在方法代码错误:java.lang.IllegalStateException:无法为android执行方法:onClick,java,android,onclick,accelerometer,Java,Android,Onclick,Accelerometer,我已经做了一个android项目,它将启动一个加速计传感器,并将传感器的x、y、z数据存储在一个文件中。我在方法start中添加了代码start.setEnabled(false)和stop.setEnabled(true),此后我的代码在start处崩溃。错误如下: 更新:这是my.xml主布局文件: 下面是我的java代码: package com.example.zhenga1.photojewel; 导入android.app.Activity; 导入android.con
start
中添加了代码start.setEnabled(false)
和stop.setEnabled(true)
,此后我的代码在start
处崩溃。错误如下:
更新:这是my.xml主布局文件:
下面是我的java代码:
package com.example.zhenga1.photojewel;
导入android.app.Activity;
导入android.content.Context;
导入android.hardware.Sensor;
导入android.hardware.SensorEvent;
导入java.lang.Boolean;
导入java.io.File;
导入android.hardware.SensorEventListener;
导入android.hardware.SensorManager;
导入android.os.Bundle;
导入android.os.SystemClock;
导入android.view.view;
导入android.widget.Toast;
导入android.widget.Button;
导入android.widget.TextView;
导入java.util.TimerTask;
导入java.util.Timer;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.array;
公共类Main3活动扩展活动实现SensorEventListener{
专用传感器加速度;
静态专用传感器;
公共浮动[]线性加速度;
私人浮动maxdeltax、maxdeltay、maxdeltaz;
公众浮力[]重力;
私有布尔布尔布尔=Boolean.TRUE;
公众价值;
私人浮动deltax、deltay、deltaz;
私有文件编写器prnt;
私人定时器;
专用定时器任务定时器任务;
私人文件折叠、归档;
专用按钮启动、停止;
私有文本视图curx、cury、curz;
私人整数计数,凝乳;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
计数=0;
初始化对象();
System.out.println(“这是以米尔斯为单位的时钟时间”+SystemClock.uptimeMillis());
线性加速度=新浮点数[3];
开始=(按钮)findViewById(R.id.button1);
停止=(按钮)findViewById(R.id.button2);
maxdeltax=0f;
maxdeltay=0f;
maxdeltaz=0f;
重力=新浮子[3];
折叠=新文件(“SD卡/振动”);
如果(!fold.exists()){
fold.mkdir();
}
文件=新文件(“sdcard/vibration/data.txt”);
int v=0;
如果(!file.exists())
{
试一试{
createNewFile();
}捕获(IOE异常){
e、 printStackTrace();
}
凝乳=0;
}
否则{
while(file.exists()){
v++;
文件=新文件(“SD卡/振动/数据“+v+”.txt”);
凝乳=v;
}
int d=v-1;
文件=新文件(“SD卡/振动/数据”+d+“.txt”);
如果(file.length()>300)
{
文件=新文件(“SD卡/振动/数据”+d+“.txt”);
凝乳=d;
}
试一试{
createNewFile();
}捕获(IOE异常){
e、 printStackTrace();
}
}
prevvalue=新浮点[3];
数组。填充(prevvalue,0);
Sensor=(SensorManager)getSystemService(Context.Sensor\u服务);
Accel=Sensor.getDefaultSensor(android.hardware.Sensor.TYPE\加速计);
curx=(TextView)findViewById(R.id.TextView);
cury=(TextView)findViewById(R.id.textView2);
curz=(TextView)findViewById(R.id.textView3);
显示当前值(0,0,0);
试一试{
prnt=新的FileWriter(文件,Boolean.TRUE);
}捕获(IOE异常){
e、 printStackTrace();
}
}
私有void初始化项()
{
timerTask=新的timerTask(){
@凌驾
公开募捐{
保存曲线(maxdeltax、maxdeltay、maxdeltaz);
maxdeltax=0f;
maxdeltay=0f;
maxdeltaz=0f;
}
};
}
公共无效开始(视图)
{
stop.setEnabled(true);
传感器。寄存器侦听器(此、加速、传感器管理器。传感器延迟正常);
定时器=新定时器();
时间表(timerTask,10001000);
start.setEnabled(false);
}
公共空心端(视图)
{
传感器。取消注册侦听器(此);
显示当前值(0,0,0);
试一试{
prnt.close();
}捕获(IOE异常){
e、 printStackTrace();
}
timer.cancel();
stop.setEnabled(false);
start.setEnabled(true);
}
@凌驾
传感器更改时的公共无效(传感器事件){
deltax=Math.abs(event.values[0]-prevvalue[0]);
deltay=Math.abs(event.values[1]-prevvalue[1]);
deltaz=Math.abs(event.values[2]-prevvalue[2]);
findMaxValues(deltax、deltay、deltax);
如果(Math.abs(deltax)即使你初始化了那些没有指向你的活动布局按钮的按钮,我也会在Android Studio
中遇到同样的情况,在你的布局文件中,你的开始按钮有idR.id.button
并且在你的活动类中,你正在使用idR.id.button1
找到这个视图。
您的布局:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Accelerometer"
android:id="@+id/button" <--- HERE
android:onClick="start"
android:layout_marginTop="300dp"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:textStyle="normal"
android:textSize="6pt"/>
你需要在两个位置设置相同的id。你能发布你的活动布局文件吗?这是控件的id冲突。你必须在java代码中传递与xml文件中相同的按钮id才能正确找到控件。我的意思是,在xml文件中,你有id“button”作为开始按钮,你可以在java代码中找到它“R.id.button1”所以请修复它并尝试运行。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context="com.example.zhenga1.photojewel.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Accelerometer"
android:id="@+id/button"
android:onClick="start"
android:layout_marginTop="300dp"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:textStyle="normal"
android:textSize="6pt"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="End Accelerometer"
android:onClick="end"
android:id="@+id/button2"
android:layout_alignParentRight="true"
android:layout_marginTop="300dp"
android:textStyle="normal"
android:textSize="6pt"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:layout_marginTop="200dp"
android:layout_marginLeft="150dp"
android:src="@mipmap/vibrator_pic"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView"
android:layout_alignParentBottom="true"
android:layout_marginTop="600dp"
android:layout_marginLeft="0dp"
android:layout_marginStart="0dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView2"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView3"
android:layout_alignParentBottom="true"
android:layout_marginTop="600dp"
android:layout_alignParentRight="true"/>
<ImageButton
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/imageButton2"
android:layout_alignParentLeft="true"
android:onClick="back"
android:layout_alignParentTop="true"
android:src="@mipmap/back_button"/>
</RelativeLayout>
package com.example.zhenga1.photojewel;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import java.lang.Boolean;
import java.io.File;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Toast;
import android.widget.Button;
import android.widget.TextView;
import java.util.TimerTask;
import java.util.Timer;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
public class Main3Activity extends Activity implements SensorEventListener{
private Sensor Accel;
static private SensorManager Sensor;
public float[] linear_acceleration;
private float maxdeltax, maxdeltay, maxdeltaz;
public float[] gravity;
private Boolean bool = Boolean.TRUE;
public float[] prevvalue;
private float deltax, deltay, deltaz;
private FileWriter prnt;
private Timer timer;
private TimerTask timerTask;
private File fold, file;
private Button start, stop;
private TextView curx,cury,curz;
private int count, curd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
count = 0;
initializetimer();
System.out.println("This is the clock time in Mills"+SystemClock.uptimeMillis());
linear_acceleration = new float[3];
start = (Button)findViewById(R.id.button1);
stop = (Button)findViewById(R.id.button2);
maxdeltax = 0f;
maxdeltay = 0f;
maxdeltaz = 0f;
gravity = new float[3];
fold = new File("sdcard/vibration");
if(!fold.exists()) {
fold.mkdir();
}
file = new File("sdcard/vibration/data.txt");
int v=0;
if(!file.exists())
{
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
curd = 0;
}
else {
while (file.exists()) {
v++;
file = new File("sdcard/vibration/data" + v + ".txt");
curd = v;
}
int d = v-1;
file = new File("sdcard/vibration/data"+d+".txt");
if(file.length()>300)
{
file = new File("sdcard/vibration/data"+d+".txt");
curd = d;
}
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
prevvalue = new float[3];
Arrays.fill(prevvalue,0);
Sensor = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Accel = Sensor.getDefaultSensor(android.hardware.Sensor.TYPE_ACCELEROMETER);
curx = (TextView)findViewById(R.id.textView);
cury = (TextView)findViewById(R.id.textView2);
curz = (TextView)findViewById(R.id.textView3);
displayCurrentValues(0,0,0);
try {
prnt = new FileWriter(file, Boolean.TRUE);
} catch (IOException e) {
e.printStackTrace();
}
}
private void initializetimer()
{
timerTask = new TimerTask() {
@Override
public void run() {
saveCurVals(maxdeltax,maxdeltay,maxdeltaz);
maxdeltax = 0f;
maxdeltay = 0f;
maxdeltaz = 0f;
}
};
}
public void start(View view)
{
stop.setEnabled(true);
Sensor.registerListener(this, Accel, SensorManager.SENSOR_DELAY_NORMAL);
timer = new Timer();
timer.schedule(timerTask, 1000, 1000);
start.setEnabled(false);
}
public void end(View view)
{
Sensor.unregisterListener(this);
displayCurrentValues(0, 0, 0);
try {
prnt.close();
} catch (IOException e) {
e.printStackTrace();
}
timer.cancel();
stop.setEnabled(false);
start.setEnabled(true);
}
@Override
public void onSensorChanged(SensorEvent event) {
deltax = Math.abs(event.values[0]-prevvalue[0]);
deltay = Math.abs(event.values[1]-prevvalue[1]);
deltaz = Math.abs(event.values[2]-prevvalue[2]);
findMaxValues(deltax,deltay,deltax);
if(Math.abs(deltax)<1)
{
deltax=0;
}
if(Math.abs(deltay)<1)
{
deltay=0;
}
if(Math.abs(deltaz)<1)
{
deltaz=0;
}
displayCurrentValues(deltax,deltay,deltaz);
prevvalue[0] = event.values[0];
prevvalue[1] = event.values[1];
prevvalue[2] = event.values[2];
}
private void findMaxValues(float x, float y, float z)
{
if(maxdeltax < x)
{
maxdeltax = x;
}
if(maxdeltay < y)
{
maxdeltay = y;
}
if(maxdeltaz < z)
{
maxdeltaz = z;
}
}
private void displayCurrentValues(float x, float y, float z)
{
curx.setText("x:"+Float.toString(x));
cury.setText("y:"+Float.toString(y));
curz.setText("z:"+Float.toString(z));
}
private void saveCurVals(float x, float y, float z)
{
count++;
try
{
prnt.write(Float.toString(x) + " " + Float.toString(y) + " " + Float.toString(z) + "\n");
prnt.flush();
}catch (IOException e)
{
e.printStackTrace();
}
if(file.length()>300)
{
redefineFile();
}
}
private void redefineFile()
{
int bigd = curd + 1;
file = new File("sdcard/vibration/data"+bigd+".txt");
curd = bigd;
try {
file.createNewFile();
prnt = new FileWriter(file,Boolean.TRUE);
} catch (IOException e) {
e.printStackTrace();
}
}
public void back(View view)
{
finish();
try {
prnt.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
if(accuracy == SensorManager.SENSOR_STATUS_ACCURACY_HIGH)
{
Toast.makeText(getApplicationContext(),"GOOD QUALITY and ACCURACY SENSOR",Toast.LENGTH_LONG).show();
}
}
}
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Accelerometer"
android:id="@+id/button" <--- HERE
android:onClick="start"
android:layout_marginTop="300dp"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:textStyle="normal"
android:textSize="6pt"/>
start = (Button)findViewById(R.id.button1);