2013-08-17 65 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