编辑:我原来的问题在线下面。我决定采用一种更简单的方法来设置按钮并分配点击功能。我在以下链接中找到了它。他很好地解释了两种方法之间的区别......
Android User Interface Design: Basic Buttons
我意识到这是一个很受欢迎的问题,但在所有的例子中,我看到的问题似乎都是一个被忽视的简单细节,而细节却永远不变。我确信这是基本的。我刚刚开始使用Android编程,这是对现有代码的修改。
应用程序在空白页面上有一个按钮,我希望按钮单击通过Amarino API将int发送到我的Arduino。这是我的MainActivity代码
package com.example.buttontest1;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import at.abraxas.amarino.Amarino;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
public class MainActivity extends Activity{
private Button button;
private static final String DEVICE_ADDRESS = "00:06:66:4B:E4:23";
public Context foo1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Amarino.connect(this, DEVICE_ADDRESS);
setContentView(R.layout.main);
addListenerOnButton();
}
public void addListenerOnButton() {
//Select a specific button to bundle it with the action you want
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'j', 1);
}
});
}
protected void onStop() {
super.onStop();
// stop Amarino's background service, we don't need it any more
Amarino.disconnect(this, DEVICE_ADDRESS);
}
}
我看到的错误就是这个,参考第38行:
方法sendDataToArduino(Context,String,char,int)在类型中 Amarino不适用于这些论点(新的 View.OnClickListener(){},String,char,int)
所以上下文和方法有问题吗?
答案 0 :(得分:0)
Teh api期待Context
的对象,但您将this
传递给:
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'j', 1);
这不是Context的对象,而是OnClickListener
object。
答案 1 :(得分:0)
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'j', 1);
this
这里指的是View.OnClickListener's
当前实例。编译错误基本上表示,sendDataToArduino()
期望第一个参数为Context
,但您传递的是OnClickListener
答案 2 :(得分:0)
sendDataToArduino
期望其第一个参数为Context
类型。你传递的是View.onClickListener
。不要将this
作为第一个参数传递,而是尝试设置上述here的上下文并将其作为第一个参数传递。
在超级调用后尝试在onCreate方法中添加以下内容:
MainActivity.context = getApplicationContext();
在onCreate之后还添加以下方法:
public static Context getAppContext() {
return MainActivity.context;
}
现在使用以下方法调用方法:
Amarino.sendDataToArduino(getApppContext(), DEVICE_ADDRESS, 'j', 1);