Android 广播接收机错误

Android 广播接收机错误,android,broadcastreceiver,runtime-error,Android,Broadcastreceiver,Runtime Error,我的代码试图在SQLITE表中保存四个wifi路由器的信号强度。但是我在com.shopsense.wififin.CreateDatabase中收到一个错误06-19 18:33:19.320:E/AndroidRuntime(3451):java.lang.RuntimeException:接收广播意图时出错{act=android.net.wifi.SCAN_RESULTS}$WifiReceiver@4050e3d0 我找到了问题的答案。问题是我试图存储扫描结果(ss)的数组被初始化为n

我的代码试图在SQLITE表中保存四个wifi路由器的信号强度。但是我在com.shopsense.wififin.CreateDatabase中收到一个错误06-19 18:33:19.320:E/AndroidRuntime(3451):java.lang.RuntimeException:接收广播意图时出错{act=android.net.wifi.SCAN_RESULTS}$WifiReceiver@4050e3d0

我找到了问题的答案。问题是我试图存储扫描结果(ss)的数组被初始化为null。当我将其初始化为零时,代码工作正常。对不起,我可以在这里发布正确的代码,因为我现在已经更改了algo,并且那个版本已经不存在了。谢谢你的帮助,如果我的问题可读性不好,我很抱歉。我是一个新用户,可能犯了一些错误

在此发布代码和日志文件

public class CreateDatabase extends Activity {

static WifiManager wifi;
Button stop;
String TAG;
ScanResult signal;
BroadcastReceiver receiver;
int total=0;
int pos=1;

String[] keys = {"c8:d3:a3:be:88:e8","cc:b2:55:fa:9f:1d","58:6d:8f:96:1c:be","fc:f5:28:3f:43:14"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    stop = (Button) findViewById(R.id.bstop);

     wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

     if(!wifi.isWifiEnabled()){

     if(wifi.getWifiState() != WifiManager.WIFI_STATE_ENABLING){
        Toast.makeText(getApplicationContext(), "Putting wi-fi on..", Toast.LENGTH_SHORT).show();
        wifi.setWifiEnabled(true);
            }
         }

     wifi.startScan();


     if(receiver==null)
        receiver = new WifiReceiver(this);

    registerReceiver(receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

    Log.i(TAG,"Written data");



}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
类WifiReceiver扩展了BroadcastReceiver{

    CreateDatabase wifiScan;

    public WifiReceiver(CreateDatabase wifiScan) {
        // TODO Auto-generated constructor stub
            super();
            this.wifiScan = wifiScan;
    }


    @SuppressWarnings("null")
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub
        List<ScanResult> results = wifiScan.wifi.getScanResults();
        Log.i(TAG,"Got scan results");
        //int total = 0;
        //float average = 0;
        int[] ss = null;

        for (int i = 0; i < results.size(); i++) {

            ScanResult scanResult = results.get(i);
            Log.i(TAG,"Inside loop");
            for(String key:keys){
                if(key.contains(scanResult.BSSID)){

                    Log.i(TAG,"Inside if condition");
                    ss[i] = Math.abs(scanResult.level);
                    Log.i(TAG,"ssx" +ss[i]);
                    //total+=Math.abs(scanResult.level);
            }


         }
        }

            //average = (total/ results.size());

            Data entry = new Data(CreateDatabase.this);
            entry.open();
            //entry.createEntry(average,pos);
            Log.i(TAG,"Going to createEntry");
            entry.createEntry(ss, pos);
            entry.close();
            stop.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    Toast.makeText(getApplicationContext(), "Stopping app..", Toast.LENGTH_SHORT).show();
                    unregisterReceiver(receiver);
                }
            });
            pos++;
            CreateDatabase.wifi.startScan();
    }




}

当我尝试在日志文件中打印时,如果出现条件,则打印到内部。之后,我得到错误。是否有人可以帮助我?getScanResults()有时返回null您是否授予WiFi权限?是的。我已授予WiFi权限。但是,我没有更改ss[i]在for循环中,如果我更改了一些变量,如注释的total语句,那么就没有问题了。我已经编辑了问题以包含解决方案。谢谢大家的建议:)
![log file][1]