尝试将String值传递给SQLiteDatabase.query()方法中的whereArgs参数时,我遇到了一个特殊问题。 我正在尝试根据数据库中存储的SSID列表检查连接的Wi-Fi SSID。
SSID名称的值(字符串)是从WifiManager.getConnectionInfo().getSSID()
方法获得的,如下所示:
String ssid = info.getSSID();
然后将此字符串传递给数据库帮助程序,该数据库帮助程序尝试获取具有SSID名称的行。 (该行还包含与应用程序相关的其他Wi-Fi网络保存数据。)
问题是我似乎无法通过query()函数中的whereArgs []参数接受ssid
参数。
如下所示,连接到名为_The Cloud
的网络导致第一个Log.d读取D/ssidGiven: "_The Cloud"
,第二个读取D/Cursor Count: 0
,尽管有一个条目数据库中的名称。
public String getSSIDStatus(String ssid) {
Log.d("test",ssid);
SQLiteDatabase db = this.getReadableDatabase();
String status = null;
try {
Log.d("ssidGiven",ssid);
String[] matchWith = new String[] {ssid};
Cursor cursor = db.query(SSID_TABLE_NAME, SSID_COLUMN_NAMES, SSID_COLUMN_NAMES[0]+"=?", matchWith, null, null, null);
Log.d("Cursor Count", String.valueOf(cursor.getCount()));
...
如果我换出matchWith变量以包含硬编码字符串
String[] matchWith = new String[] {"_The Cloud"};
它完美运行并显示Cursor计数为1。
为什么我不能传递变量,尽管它是(据我所知),与硬编码字符串相同?