Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-第一次询问时电池电量为空_Java_Android_Intentfilter_Batterylevel_Android Broadcastreceiver - Fatal编程技术网

Java Android-第一次询问时电池电量为空

Java Android-第一次询问时电池电量为空,java,android,intentfilter,batterylevel,android-broadcastreceiver,Java,Android,Intentfilter,Batterylevel,Android Broadcastreceiver,我正试图从服务中获取电池电量。我正在成功地升级。但我有一个问题。也就是说,当我第一次尝试获取电池电量时,我得到了空值但几秒钟后当我询问时,我得到了确切的水平。我不明白为什么会发生这种情况 以下是获取电池电量的代码:- String bLevel; private String getBatteryLevel(){ BroadcastReceiver cBReceiver = new BroadcastReceiver() { @Override

我正试图从服务中获取电池电量。我正在成功地升级。但我有一个问题。也就是说,当我第一次尝试获取电池电量时,我得到了空值但几秒钟后当我询问时,我得到了确切的水平。我不明白为什么会发生这种情况

以下是获取电池电量的代码:-

String bLevel;
private String getBatteryLevel(){
        BroadcastReceiver cBReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                int currentScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                int batteryLevel;
                if (currentLevel >= 0 && currentScale > 0) {
                    batteryLevel = (currentLevel * 100) / currentScale;
                    bLevel = Integer.toString(batteryLevel) + " percent";
                }
            }
        };
        IntentFilter cIFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(cBReceiver, cIFilter);
        return bLevel;
    }

请看代码。我不知道为什么当我第一次要求时,电池电量会null。请尽我所能帮助我。您正在线性运行代码,并返回一个未初始化的值

String bLevel;
// stuffs ... stuffs ... stuffs...
return bLevel;
此字符串为空,则您正在注册接收方。一旦该事件被广播,您就可以更改变量,并且它具有正确的信息


这打破了OO范式。

据我所知。您正在线性运行代码,并返回一个未初始化的值

String bLevel;
// stuffs ... stuffs ... stuffs...
return bLevel;
此字符串为空,则您正在注册接收方。一旦该事件被广播,您就可以更改变量,并且它具有正确的信息


这打破了OO模式。

对不起,我不明白你想说什么。在这里,bLevel是一个全局变量,现在我应该把它设为内部变量吗?不。你在一个面向对象的系统中制作一个“程序化”的程序。你正在打破范式。。。。。这样想,您有一个指向代码执行的
指针。它运行整个代码列表,执行1乘1。。。您可以注册您的广播以接收与电池电量相关的下一个事件。。。。假设它将在10秒钟内发生。。。。在这些秒过去之前,变量中有什么
null
。我现在该怎么办?@muhammajobayer该方法必须等待BroadcastReceiver@MuhammadJobayer你应该首先理解
线程
s,然后做一个小的
if(bLevel!=null){return bLevel;}否则{返回“收集数据”}
对不起,我不明白你想说什么。在这里,bLevel是一个全局变量,现在我应该把它设为内部变量吗?不。你在一个面向对象的系统中制作一个“程序化”的程序。你正在打破范式。。。。。这样想,您有一个指向代码执行的
指针。它运行整个代码列表,执行1乘1。。。您可以注册您的广播以接收与电池电量相关的下一个事件。。。。假设它将在10秒钟内发生。。。。在这些秒过去之前,变量中有什么
null
。我现在该怎么办?@muhammajobayer该方法必须等待BroadcastReceiver@MuhammadJobayer您应该首先理解
线程
s,然后在if(bLevel!=null){return bLevel;}else{return“收集数据”}中创建一个小
if(bLevel!=null)
我建议不要将BroadcastReceiver打包到方法中。或者至少取消注册…我建议不要将BroadcastReceiver打包到方法中。或者至少取消注册。。。