我无法弄清楚.query调用的语法.我需要选择与某个列匹配的所有记录,这些列对于第二个(不同的)列没有空值或空值
我最好的尝试:
Cursor cursor = mDatabase.query(DatabaseOpenHelper.TABLE_ROOMS, mAllColumns,
DatabaseOpenHelper.KEY_ROOM_HOSPITAL_ID
+ " =? AND " + DatabaseOpenHelper.KEY_ISO + " IS NOT NULL OR NOT ?",
new String[]{String.valueOf(hospitalId), ""}, null, null, null);
Run Code Online (Sandbox Code Playgroud)
这将返回所有记录.如果我使用AND代替OR,它返回与hospitalId匹配的记录,但忽略NOT NULL或NOT""部分.
有小费吗?我应该使用rawQuery调用吗?谢谢.
我已经根据文档和其他问题检查并仔细检查了我的清单。我不明白为什么 setSearchableInfo 返回 NullPointerException
主活动.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
// current activity is not searchable activity
ComponentName cn = new ComponentName(this, SearchResultsActivity.class);
searchView.setSearchableInfo(searchManager.getSearchableInfo(cn));
return true;
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml
<activity
android:name=".MainActivity"
android:label="@string/title_main_activity">
<intent-filter>
<action android:name="com.csgiusa.treatmentmanager.csgitreatmentmanager.RoomEditDetailed" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.csgiusa.treatmentmanager.csgitreatmentmanager.MainActivity" />
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultsActivity" />
</activity>
<activity …Run Code Online (Sandbox Code Playgroud) 我在登录时创建了一个共享首选项文件,但我无法找出更改我的应用程序内部首选项的代码.
SharedPreferences.java
public void editHospitalId(String hospital_id) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(_context);
Editor editor = prefs.edit();
editor.putString(KEY_HOSPITALID, hospital_id);
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
我已经在登录时初始化了KEY_HOSPITALID的值:
SharedPreferences.java
// Constructor
public SessionManager(Context context){
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
// create login session
public void createLoginSession(String name, String hospital_id){
// Storing login value as TRUE
editor.putBoolean(IS_LOGIN, true);
// Storing name in pref
editor.putString(KEY_NAME, name);
// Storing email in pref
editor.putString(KEY_HOSPITALID, hospital_id);
// commit changes
editor.commit();
Run Code Online (Sandbox Code Playgroud)
我想我可以删除该值并重新添加它?但必须有一种方法来覆盖它.