Android 广播接收机错误
我的代码试图在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,并且那个版本已经不存在了。谢谢你的帮助,如果我的问题可读性不好,我很抱歉。我是一个新用户,可能犯了一些错误 在此发布代码和日志文件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
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]