2013-08-17 226 views
0

编辑:我原来的问题是在线以下。我决定采用更简单的方法来设置按钮并分配点击功能。我在以下链接找到它。他做了解释2种方法之间的差异的一个很好的工作...方法未定义

Android User Interface Design: Basic Buttons


我意识到这是一个流行的问题,但在所有的例子我看这个问题似乎是一个被忽略的简单细节,细节从来都不相同。我相信这是基本的。我刚开始使用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行:

The method sendDataToArduino(Context, String, char, int) in the type Amarino is not applicable for the arguments (new View.OnClickListener(){}, String, char, int)

所以这是与上下文和方法的问题?

+0

想想这个'this'的位置。我想你正在寻找'MainActivity.this'。 –

回答

0

德API预计Context的对象,但你通过this到:

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

这不是上下文的对象,而不是它是OnClickListener对象。

+0

在这种情况下'this'将是一个'View.OnClickListener'实例。 – Vikram

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

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

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); 
+0

我尝试用“this.getApplicationContext()”,“getContext()”,“Amarino.this”和“MainActivity.this”替换“this”。没有工作。 – user2691214

+0

您是否尝试设置链接中提到的上下文? –

+0

我遇到了麻烦,因为我还是这个新手。它说添加“android:name =”com.xyz.MyApplication“>”到我的Manifest文件。我应该用我的信息替换“xyz.MyApplication”还是应该输入那个逐字? – user2691214