报错:java.lang.NullPointerException: Attempt to invoke virtual method ‘java.util.List com.example.bindservice.BinderService.getRandomNumber()’ on a null object reference
BinderService类:
public class BinderService extends Service {
public BinderService() {
}
public class MyBinder extends Binder { //创建MyBinder内部类并获取服务对象与Service状态
public BinderService getService() { //创建获取Service的方法
return BinderService.this; //返回当前Service类
}
}
@Override
public IBinder onBind(Intent intent) { //必须实现的绑定方法
return new MyBinder(); //返回MyBinder服务对象
}
public List getRandomNumber() { //创建获取随机号码的方法
List resArr = new ArrayList(); //创建ArrayList数组
String strNumber="";
for (int i = 0; i < 7; i++) { //将随机获取的数字转换为字符串添加到ArrayList数组中
int number = new Random().nextInt(33) + 1;
//把生成的随机数格式化为两位的字符串
if (number<10) { //在数字1~9前加0
strNumber = "0" + String.valueOf(number);
} else {
strNumber=String.valueOf(number);
}
resArr.add(strNumber);
}
return resArr; //将数组返回
}
@Override
public void onDestroy() { //销毁该Service
super.onDestroy();
}
}
MainActivity类:
public class MainActivity extends Activity {
BinderService binderService; //声明BinderService
//文本框组件ID
int[] tvid = {R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4, R.id.textView5,
R.id.textView6, R.id.textView7};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_random = (Button) findViewById(R.id.btn); //获取随机选号按钮
btn_random.setOnClickListener(new View.OnClickListener() { //单击按钮,获取随机彩票号码
@Override
public void onClick(View v) {
List number = binderService.getRandomNumber(); //获取BinderService类中的随机数数组
for (int i = 0; i < number.size(); i++) { //遍历数组并显示
TextView tv = (TextView) findViewById(tvid[i]); //获取文本框组件对象
String strNumber = number.get(i).toString(); //将获取的号码转为String类型
tv.setText(strNumber); //显示生成的随机号码
}
}
});
}
@Override
protected void onStart() { //设置启动Activity时与后台Service进行绑定
super.onStart();
Intent intent = new Intent(this, BinderService.class); //创建启动Service的Intent
bindService(intent, conn, BIND_AUTO_CREATE); //绑定指定Service
}
@Override
protected void onStop() { //设置关闭Activity时解除与后台Service的绑定
super.onStop();
unbindService(conn); //解除绑定Service
}
private ServiceConnection conn = new ServiceConnection() { //设置与后台Service进行通讯
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
binderService = ((BinderService.MyBinder) service).getService(); //获取后台Service信息
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
}
检查了List number = binderService.getRandomNumber(); //获取BinderService类中的随机数数组 这行代码,并没有发现什么错误。
于是在AndroidManifest.xml配置文件中查看了一下内容:
发现并没有对Service进行配置,这是因为个人在创建BinderService时,其类型不是Service类型:
因此系统并有没把他当做一个Service类型的文件,这时候就需要个人手动配置,或者重新创建一个Service类型的类!
手动注册方式: