0

编辑:我原来的问题在这条线下面。我决定采用一种更简单的方法来设置按钮和分配点击功能。我在以下链接中找到了它。他很好地解释了这两种方法之间的区别......

Android 用户界面设计:基本按钮


我意识到这是一个流行的问题,但在我看过的所有示例中,这个问题似乎是一个被忽视的简单细节,而且细节永远不会相同。我确定这是基本的。我刚开始为 Android 编程,这是对现有代码的修改。

该应用程序在空白页面上有一个按钮,我希望单击按钮通过 Amarino API 向我的 Arduino 发送一个 int。这是我的 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 行:

Amarino 类型中的方法 sendDataToArduino(Context, String, char, int) 不适用于参数 (new View.OnClickListener(){}, String, char, int)

那么上下文和方法有问题吗?

4

3 回答 3

0

Teh api 期望对象,Context但您传递this给:

            Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'j', 1);

this 不是 Context 的对象,而是OnClickListener对象。

于 2013-08-17T04:17:18.963 回答
0
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'j', 1);

this这里指的是View.OnClickListener's当前实例。编译错误基本上说,sendDataToArduino()期望第一个参数为,Context但您传递的是OnClickListener

于 2013-08-17T04:17:35.387 回答
0

sendDataToArduino期望它的第一个参数是 type Context。你正在传递一个View.onClickListener. 与其this作为第一个参数传递,不如尝试设置这里提到的上下文并将其作为第一个参数传递。

尝试在 super 调用之后在 onCreate 方法中添加以下内容:

MainActivity.context = getApplicationContext();

在 onCreate 之后还要添加以下方法:

public static Context getAppContext() {
    return MainActivity.context;
}

现在调用该方法:

Amarino.sendDataToArduino(getApppContext(), DEVICE_ADDRESS, 'j', 1);
于 2013-08-17T04:17:40.803 回答