做一个基本的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
}
}
答案 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()
方法。