0

做一个基本的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

4 回答 4

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>....
于 2013-10-29T14:01:44.720 回答
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;

经过

   import android.view.View.OnClickListener;
于 2013-10-29T14:02:52.207 回答
1

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

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.theLayoutThatContains_R.id.btnStart);
}
于 2013-10-29T14:03:11.147 回答
0

您收到错误是因为您在类体内有属于方法体的代码。Eclipse 注意到语法错误并建议通过将代码更改为方法声明来“修复”它。您不会收到任何进一步的语法错误,因为编译在第一个语法错误处停止。

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

于 2013-10-29T14:15:39.743 回答