Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.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 如何从匿名类调用方法_Java_Android - Fatal编程技术网

Java 如何从匿名类调用方法

Java 如何从匿名类调用方法,java,android,Java,Android,我有一个类,可以检测手机何时朝上,何时朝下,并在屏幕上正面朝上或正面朝下打印 package com.example.kyriakos.androiddetectflipping; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.h

我有一个类,可以检测手机何时朝上,何时朝下,并在屏幕上正面朝上或正面朝下打印

package com.example.kyriakos.androiddetectflipping;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
import java.util.List;

public  class Test extends Activity {

    SensorManager sensorManager;
    Sensor accelerometerSensor;
    boolean accelerometerPresent;

    TextView face;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_android_detect_flipping);

        face = (TextView)findViewById(R.id.face);

        sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
        if(sensorList.size() > 0){
            accelerometerPresent = true;
            accelerometerSensor = sensorList.get(0);
        }
        else{
            accelerometerPresent = false;
            face.setText("No accelerometer present!");
        }
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        if(accelerometerPresent){
            sensorManager.registerListener(accelerometerListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    @Override
    protected void onStop() {

        super.onStop();
        if(accelerometerPresent){
            sensorManager.unregisterListener(accelerometerListener);
        }
    }

    public SensorEventListener accelerometerListener = new SensorEventListener(){

        @Override
        public void onAccuracyChanged(Sensor arg0, int arg1) {

        }

        @Override
        public void onSensorChanged(SensorEvent arg0) {

            float z_value = arg0.values[2];
            if (z_value >= 0){
                face.setText("Face UP");
            }
            else{
                face.setText("Face DOWN");
            }
        }};


}
它认为onSensorChanged方法负责打印消息,所以我尝试在类Flip中调用onSensorChanged方法

    SensorEventListener ob = new SensorEventListener();
    ob.onSensorChanged;

但这是错误的,因为SensorEventListener是一个匿名的内部类!!所以我的问题是如何调用这个方法?我读过关于如何从匿名内部类调用方法的文章,但我不太理解。如果我的问题很愚蠢,很抱歉,但我是java、android新手,我正在尝试学习

您不是在分配匿名类,而是将其基类分配给
ob
。如果要访问它并使用它的重载方法,必须执行以下操作:

Test test = new Test();
SensorEventListener ob = test.accelerometerListener;

然后可以对其调用重写的方法。

要在哪里调用该方法?它在
Flip onCreate()
方法中吗?是的,我想在Flip类中调用它如果你想调用
onSensorChanged
方法,你需要一个
SensorEvent
对象,对吗?我找不到
SensorEvent
object您的代码中有这样的东西吗?
SensorEvent ob=new SensorEvent();ob.onSensorChanged()否,
SensorEventListener
不是匿名类。看!这里有一个名字:
SensorEventListener
!谢谢你现在我想我理解我的错误了,所以我这样做
Test Test=new Test();SensorEventListener ob=test.accelerometerListener;ob.onSensorChanged(传感器事件arg0)但是现在它说它无法解析arg0:/我又做错什么了吗?提前谢谢你,你必须提供一个论点。您必须提供一个
SensorEvent
来执行它。您可以通过某种方式创建
sensEvent
(我不知道如何构建它)。然后将该方法调用为
ob.onSensorChanged(sensEvent)
。它通常由Android提供。早些时候有一个问题。
Test test = new Test();
SensorEventListener ob = test.accelerometerListener;