Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代码错误:java.lang.IllegalStateException:无法为android执行方法:onClick_Java_Android_Onclick_Accelerometer - Fatal编程技术网

代码错误:java.lang.IllegalStateException:无法为android执行方法:onClick

代码错误: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

我已经做了一个android项目,它将启动一个加速计传感器,并将传感器的x、y、z数据存储在一个文件中。我在方法
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
中遇到同样的情况,在你的布局文件中,你的开始按钮有id
R.id.button
并且在你的活动类中,你正在使用id
R.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);