Android开发

报错: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类型的类!
手动注册方式:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值