leeisshe 2017-10-20 06:57 采纳率: 25%
浏览 1300
已结题

怎么让那个返回值不为空

下面是我想获取电池电量信息的代码:

package com.android.infocolle;
import java.util.ArrayList;
import java.util.HashMap;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.util.Log;

public class BatteryDetailInfo {

private static ArrayList<HashMap<String,Object>> mBatteryList = new ArrayList<HashMap<String,Object>>();
private static HashMap<String, Object> mBatteryMap = new HashMap<String, Object>();

public static ArrayList<HashMap<String, Object>> getBatteryDetail(Intent intent,Context context) { 

    /* 创建广播接收器 */  
    BroadcastReceiver onBatteryInfoReceiver  = new BroadcastReceiver()   
    {  
        private int BatteryN;       //目前电量  
        private int BatteryV;       //电池电压  
        private double BatteryT;        //电池温度  
        private String BatteryStatus;   //电池状态  
        private String BatteryTemp;     //电池使用情况  

        @Override
        public void  onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub

            String action = intent.getAction();  
            /* 
             * 如果捕捉到的action是ACTION_BATTERY_CHANGED, 就运行onBatteryInfoReceiver() 
             */  
            if (Intent.ACTION_BATTERY_CHANGED.equals(action))   
            {  
                BatteryN = intent.getIntExtra("level", 0);    //目前电量  
                BatteryV = intent.getIntExtra("voltage", 0);  //电池电压  
                BatteryT = intent.getIntExtra("temperature", 0);  //电池温度  

                switch (intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN))   
                {  
                case BatteryManager.BATTERY_STATUS_CHARGING:  
                    BatteryStatus = "充电状态";  
                    break;  
                case BatteryManager.BATTERY_STATUS_DISCHARGING:  
                    BatteryStatus = "放电状态";  
                    break;  
                case BatteryManager.BATTERY_STATUS_NOT_CHARGING:  
                    BatteryStatus = "未充电";  
                    break;  
                case BatteryManager.BATTERY_STATUS_FULL:  
                    BatteryStatus = "充满电";  
                    break;  
                case BatteryManager.BATTERY_STATUS_UNKNOWN:  
                    BatteryStatus = "未知道状态";  
                    break;  
                }  

                switch (intent.getIntExtra("health", BatteryManager.BATTERY_HEALTH_UNKNOWN))   
                {  
                case BatteryManager.BATTERY_HEALTH_UNKNOWN:  
                    BatteryTemp = "未知错误";  
                    break;  
                case BatteryManager.BATTERY_HEALTH_GOOD:  
                    BatteryTemp = "状态良好";  
                    break;  
                case BatteryManager.BATTERY_HEALTH_DEAD:  
                    BatteryTemp = "电池没有电";  
                    break;  
                case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:  
                    BatteryTemp = "电池电压过高";  
                    break;  
                case BatteryManager.BATTERY_HEALTH_OVERHEAT:  
                    BatteryTemp =  "电池过热";  
                    break;  
                }   

                mBatteryMap.clear();
                mBatteryMap.put("BatteryN", BatteryN);
                mBatteryMap.put("BatteryV", BatteryV);
                mBatteryMap.put("BatteryT", BatteryT);
                mBatteryMap.put("BatteryStatus", BatteryStatus);
                mBatteryMap.put("BatteryTemp", BatteryTemp);
                Log.i("20171012liqin mBatteryMap : ", String.valueOf(mBatteryMap));
            }  
            mBatteryList.clear();
            mBatteryList.add(mBatteryMap);

            Log.i("20171012liqin (BroadcastReceiver) mBatteryMap : ", String.valueOf(mBatteryMap));
            Log.i("20171012liqin (BroadcastReceiver) mBatteryList : ", String.valueOf(mBatteryList));
        }  
    };  

    context.registerReceiver(onBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    Log.i("20171012liqin (getBatteryDetail) mBatteryList : ", String.valueOf(mBatteryList)); 
    return mBatteryList;
}

}

当我在activity里面调用BatteryDetailInfo.getBatteryDetail 时返回的 mBatteryList 值总是为空,具体log如下

20171012liqin (getBatteryDetail) mBatteryList : : []
20171012liqin mBatteryMap : : {BatteryStatus=充电状态, BatteryT=308.0, BatteryTemp=状态良好, BatteryV=4317, BatteryN=100}
20171012liqin (BroadcastReceiver) mBatteryMap : : {BatteryStatus=充电状态, BatteryT=308.0, BatteryTemp=状态良好, BatteryV=4317, BatteryN=100}
20171012liqin (BroadcastReceiver) mBatteryList : : [{BatteryStatus=充电状态, BatteryT=308.0, BatteryTemp=状态良好, BatteryV=4317, BatteryN=100}]

虽然registerReceiver是在return mBatteryList前面执行,但是onBatteryInfoReceiver里面的onReceive确实还没执行,mBatteryList就已经返回了

    context.registerReceiver(onBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    Log.i("20171012liqin (getBatteryDetail) mBatteryList : ", String.valueOf(mBatteryList)); 
    return mBatteryList;

求大神指点一下,这代码要怎么修改才能返回不为空的值,万谢!****

  • 写回答

1条回答 默认 最新

  • JawkyChow 2017-10-20 10:09
    关注

    很明显是onBatteryInfoReceiver还没执行完就return mBatteryList

    评论

报告相同问题?

悬赏问题

  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决