将方法返回类型设置为'void'。不太明白

时间:2013-10-29 13:56:37

标签: java android eclipse background void

做一个基本的Android后台服务应用程序。 不太明白为什么会出现错误(MainActivity.java). Error is at btnStart = (Button)findViewById(R.id.btnStart);

提供的快速修复将返回类型设置为'void'。而对于btnStop则没有错误。

package com.example.backgroundservice;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.app.Service;

public class MainActivity extends Activity implements OnClickListener{




    btnStart = (Button)findViewById(R.id.btnStart); (ERROR HERE)
    btnStop = (Button) findViewById(R.id.btnStop);

btnStart.setonClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent serviceIntent = new Intent(MainActivity.this,MyService.class);
        startService(serviceIntent);
    }
});

btnStop.setonClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent serviceIntent = new Intent (MainActivity.this,MyService.class);
        stopService(serviceIntent);
    }
});

}

@Override
public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
}
}

4 个答案:

答案 0 :(得分:2)

您的代码应该在onCreate方法中。

在调用该方法之前,您的活动未初始化,因此没有布局,并且您无法按ID找到任何UI元素。

编辑:类似的东西会起作用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout);  // this layout must contain btnStart and btnStop
    Button btnStart = (Button) findViewById(R.id.btnStart); // variables are declared then allocated
    Button btnStop = (Button) findViewById(R.id.btnStop)
    // ...<rest of your code>....

答案 1 :(得分:2)

应该在onCreate内。

Button btnStart,btnStop; // should be delcared. i guess you do not have this
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            setContentView(R.layout.yourlayout);
            btnStart = (Button)findViewById(R.id.btnStart); // initialize here
            btnStop = (Button) findViewById(R.id.btnStop)
            ...// rest of the code

我猜您在onCreate以外的地方(在任何方法之外)并且您尚未声明btnStart

      btnStart = (Button)findViewById(R.id.btnStart);

但即使你声明你需要首先扩充布局然后初始化按钮,否则你得到NUllPointerException

所以将按钮声明为类成员并在onCreate中初始化它,如上所示

编辑:

由于您已经拥有了监听器匿名内部类,因此您无需实现OnClickListener,因此您可以删除此

@Override
public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
}

您的导入信息也是错误的

替换此

   import android.content.DialogInterface.OnClickListener;

BY

   import android.view.View.OnClickListener;

答案 2 :(得分:1)

您必须覆盖活动onCreate方法并设置其内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.theLayoutThatContains_R.id.btnStart);
}

答案 3 :(得分:0)

您收到错误,因为您在类主体中拥有属于方法主体的代码。 Eclipse注意到语法错误并提议修复&#34;它通过将代码更改为方法声明。在第一次语法错误时编译停止时,您不会再获得任何语法错误。

正如其他人所指示的那样,像这样的代码的正确位置是活动的onCreate()方法。