首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java到Scala: SensorManager

从Java到Scala: SensorManager
EN

Stack Overflow用户
提问于 2012-07-20 03:24:06
回答 2查看 741关注 0票数 1

Scala/Android新手问题。我正在尝试将这段简单的代码从Java重写为Scala。Java工作代码:

代码语言:javascript
复制
private final SensorEventListener mAccListener = new SensorEventListener() {
    public void onSensorChanged(SensorEvent event) {
        // ... some code
    }
};


@Override    
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    findViewById(R.id.start).setOnClickListener(this);        

    mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    mAccSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    mSensorManager.registerListener(mAccListener, mAccSensor,
            SensorManager.SENSOR_DELAY_GAME);
}

...and Scala:

代码语言:javascript
复制
package com.example.hello

import android.app.Activity
import android.content.Context
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorManager
import android.os.Bundle
import android.os.Bundle
import android.view.View.OnClickListener
import android.view.View
import android.view.View
import android.widget.Toast
import android.widget.Toast
import android.hardware.SensorEventListener

class HelloAndroid extends Activity {

  def mAccListener (v: View) {
    // ... some code
  }

  override def onCreate(savedInstanceState : Bundle) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {
      def onClick(v: View) {
        Toast.makeText(v.getContext, "Hello World", Toast.LENGTH_LONG).show()
      }
    })

        val mSensorManager = getSystemService(Context.SENSOR_SERVICE).asInstanceOf[SensorManager]
        val mAccSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

        mSensorManager.registerListener(mAccListener(_), mAccSensor,
                SensorManager.SENSOR_DELAY_GAME)

  }
}

错误是Eclipe状态:

代码语言:javascript
复制
Multiple markers at this line
    - missing arguments for method mAccListener in class HelloAndroid; follow this method with `_' if you want to treat it as a partially applied function
    - overloaded method value registerListener with alternatives: (android.hardware.SensorEventListener,android.hardware.Sensor,Int,android.os.Handler)Boolean <and> 
     (android.hardware.SensorEventListener,android.hardware.Sensor,Int)Boolean <and> (android.hardware.SensorListener,Int,Int)Boolean <and> (android.hardware.SensorListener,Int)Boolean 
     cannot be applied to (android.view.View => Unit, android.hardware.Sensor, Int)

据我所知,Scala找不到从哪个类调用方法?我怎么才能修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 04:44:32

"mAccListener(_)“创建类型为android.view.View => Unit的函数。但是没有任何版本的registerListener可以使用这样的函数。

Java版本传入了一个SensorListener。Scala版本不应该做同样的事情吗?

您可能正在考虑从视图=>单元到SensorListener的隐式转换……如果是这样,您需要自己构建它。

票数 1
EN

Stack Overflow用户

发布于 2012-07-20 05:47:45

经过以下修正后,它才能正常工作:

代码语言:javascript
复制
class HelloAndroid extends Activity {

    def mAccListener() :SensorListener = new SensorListener {
        def onSensorChanged(x1: Int, x2: Array[Float]) = {
            var t=findViewById(R.id.acc).asInstanceOf[TextView]
            var x = x2(0).toString
            t.setText(x)
        }

        def onAccuracyChanged(a: Int, b: Int) = {
          //TODO
        }
    }

    override def onCreate(savedInstanceState : Bundle) {

    //...            

        mSensorManager.registerListener(mAccListener, SensorManager.SENSOR_DELAY_GAME)

  }
}

但我不明白的是,为什么在Java和Scala中,相同的函数会有不同的值。它既不方便,也令人困惑:

代码语言:javascript
复制
+-------------------+------------------------------+---------------------------+
| Api Function      | Java                         | Scala                     |
+-------------------+------------------------------+---------------------------+
| onSensorChanged   | SensorEvent event            | x1: Int, x2: Array[Float] |
| onAccuracyChanged | Sensor sensor, int accuracy  | a: Int, b: Int            |
+-------------------+------------------------------+---------------------------+

有人能解释一下吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11567873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档