我有一个应用程序,如果它找到一个与Parse.com用户表上类似的蓝牙mac地址,则返回一个toast。
然而它返回空指针异常,我不知道为什么。在表格中,8个用户中有2个上传了他们的mac地址。
用于蓝牙处理和比较的课程;
public class BLETestActivity extends FragmentActivity {
private TextView out;
private ParseUser currentUser = ParseUser.getCurrentUser();
private String username; Context context;
private BroadcastReceiver mReceiver;
private BluetoothDevice devicenew;
private ArrayList<String> list;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ble2);
out = (TextView) findViewById(R.id.out);
// Getting the Bluetooth adapter
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
//List<String> items = new ArrayList<String>();
//final ArrayAdapter<String> mArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
out.append("\nAdapter: " + adapter);
String device_bt = adapter.getAddress();
// Check for Bluetooth support in the first place
// Emulator doesn't support Bluetooth and will return null
if(adapter==null) {
out.append("\nBluetooth NOT supported. Aborting.");
return;
}
// Starting the device discovery
out.append("\nStarting discovery...");
adapter.startDiscovery();
//FINDER NYE ENHEDER
mReceiver = new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
//Finding devices
if (BluetoothDevice.ACTION_FOUND.equals(action))
{
// Get the BluetoothDevice object from the Intent
devicenew = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// Add the name and address to an array adapter to show in a ListView
System.out.print(devicenew.getAddress());
Log.d("Bluetooth","jeg når her til");
out.append("\nDevices Pared:");
Set<BluetoothDevice> devices = adapter.getBondedDevices();
list = new ArrayList<>();
if(!list.contains(devicenew.getAddress())) {
list.add(devicenew.getAddress());
}
for (BluetoothDevice device : devices) {
out.append("\nFound device: " + device + devicenew);
}
out.append("\nDone with discovery...");
}
}
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
// Listing paired devices
currentUser.put("BT_ID", device_bt);
currentUser.saveInBackground();
context = getApplicationContext();
final ParseQuery<ParseUser> queryParseUser = ParseUser.getQuery();
queryParseUser.findInBackground(new FindCallback<ParseUser>()
{
@Override
public void done(List<ParseUser> BTList, ParseException arg1) {
// TODO Auto-generated method stub
Log.d("Parse","we made it this far");
if (BTList != null && arg1 == null) {
for (ParseUser parseObject : BTList) {
if(parseObject.getString("BT_ID") != null){
for(String string : list) {
if(string.equals(parseObject.getString("BT_ID"))) {
String BTuser = parseObject.getString("BT_ID");
Toast toast = Toast.makeText(context, "Wow we found" + BTuser, Toast.LENGTH_SHORT);
toast.show();
}
}
}
}
} else {
Log.d("Bluetooth", "Fejl i returnering af data: " + arg1.toString());
}
}
});
}
}
更具体地说,我在这里得到空指针;
for(String string : list) {
if(string.equals(parseObject.getString("BT_ID"))) {
String BTuser = parseObject.getString("BT_ID");
Toast toast = Toast.makeText(context, "Wow we found" + BTuser, Toast.LENGTH_SHORT);
toast.show();
}
}
当我检查它时,我无法理解为什么它会返回null?
我的堆栈跟踪;
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Iterator java.util.ArrayList.iterator()' on a null object reference
at com.example.nan.spymapv2.BLETestActivity$2.done(BLETestActivity.java:113)
at com.example.nan.spymapv2.BLETestActivity$2.done(BLETestActivity.java:104)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
答案 0 :(得分:1)
您的list
变量为null,因此在传递给for(...)
循环时会抛出错误。这里有几个选项:您可以初始化声明它的空列表,所以
private ArrayList<String> list;
会变成
private ArrayList<String> list = new ArrayList<>();
或者你可以将list
添加到空检查中,所以
if (BTList != null && arg1 == null) {
会变成
if (BTList != null && arg1 == null && list != null) {
或在尝试迭代if
之前的某个时间单独使用list
语句