Android 是否要从contentProvider获取特定行?
我试图创建多个表,方法是为表中的每一列插入一个标记,然后根据标记名对它们进行排序Android 是否要从contentProvider获取特定行?,android,android-sqlite,android-contentprovider,Android,Android Sqlite,Android Contentprovider,我试图创建多个表,方法是为表中的每一列插入一个标记,然后根据标记名对它们进行排序 例如: 标签=食物 食用香蕉 食用苹果 标签=电影 电影E.T 电影蜘蛛侠 我知道如何在常规方法中使用一些for循环来实现这一点,例如: public ArrayList<Items> getall(String tag ,boolean first) { open(); ArrayList<Items> list = new ArrayList<Items>
- 例如:
- 标签=食物
- 食用香蕉
- 食用苹果
- 标签=电影
- 电影E.T
- 电影蜘蛛侠
public ArrayList<Items> getall(String tag ,boolean first) {
open();
ArrayList<Items> list = new ArrayList<Items>();
Cursor cur = myDb.query(TABLE_NOTES, null, null, null, null, null, null, null);
while (cur.moveToNext()) {
if (first) {
Items data = new Items(cur.getString(1),cur.getString(2),cur.getFloat(3),cur.getString(4));
list.add(data);
}
if(cur.getString(2).equals(tag)&&!first){
Items data = new Items(cur.getString(1),cur.getString(2),cur.getFloat(3),cur.getString(4));
list.add(data);
}
}
close();
return list;
}
公共类DbHandler扩展了SQLiteOpenHelper{
public static final String DBName = "noteDb.db";
public static final int Version = 1;
public static final String TABLE = "Notes";
public static final String ID = "_id";
public static final String NOTES = "myNotes";
public static final String TAGS = "myTags";
public static final String SET1 = "set1";
public static final String SET2 = "set2";
private static final String CREATE_TABLE_NOTES = "CREATE TABLE "
+ TABLE + "(" + ID + " INTEGER PRIMARY KEY," + NOTES
+ " TEXT,"+TAGS + " TEXT,"+SET1+ " REAL,"+SET2+" TEXT)";
public DbHandler(Context context) {
super(context, DBName, null, Version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_NOTES);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE);
onCreate(db);
}
}
编辑:
static int MY_LOADER_ID = 1;
DbHandler myDb;
ListView lv;
CustomCursorAdapter adapter;
ArrayList<Notes> list = new ArrayList<Notes>();
Spinner sp;
String[] spData;
ArrayList<String> sortedList;
ArrayAdapter<String> adapterSpinner;
String category = "";
String note = "";
float set1 = 0;
String set2 = "";
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView1);
lv.setOnItemClickListener(this);
cursor = getContentResolver().query(StatusProvider.CONTENT_URI, null, null, null, null);
adapter = new CustomCursorAdapter(this, cursor, 0);
lv.setAdapter(adapter);
getLoaderManager().initLoader(MY_LOADER_ID, null, this);
sp = (Spinner) findViewById(R.id.spinner1);
adapterSpinner = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, setSpinnerTags());
sp.setAdapter(adapterSpinner);
sp.setOnItemSelectedListener(this);
}
//Set the tags names on the spinner
private String[] setSpinnerTags() {
ArrayList<String> result = new ArrayList<String>();
while (cursor.moveToNext()) {
String tagGet = cursor.getString(cursor.getColumnIndex(DbHandler.TAGS));
if(!result.contains(tagGet)){
result.add(tagGet);
}
}
spData = new String[result.size()];
for (int i = 0; i < result.size(); i++) {
spData[i] = result.get(i);
}
return spData;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
//HERE is the title of th tags
String theTitle = spData[position];
//?????? What i do need the write here?
switch (position) {
case 0:
break;
default:
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(this, StatusProvider.CONTENT_URI, null, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
public void refreshList(){
getLoaderManager().restartLoader(MY_LOADER_ID, null, this);
}
}
static int MY_LOADER_ID=1;
数据库处理器myDb;
ListView lv;
自定义游标适配器;
ArrayList=新建ArrayList();
纺纱机;
字符串[]spData;
ArrayList分类列表;
阵列适配器;
字符串类别=”;
字符串注释=”;
浮动设置1=0;
字符串set2=“”;
光标;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);
lv.setOnItemClickListener(本);
cursor=getContentResolver().query(StatusProvider.CONTENT\u URI,null,null,null);
适配器=新的CustomCursorAdapter(这个,游标,0);
低压设置适配器(适配器);
getLoaderManager().initLoader(我的加载程序ID,null,this);
sp=(喷丝器)findViewById(R.id.spinner1);
adapterSpinner=new ArrayAdapter(这个,android.R.layout.simple_list_item_1,setSpinnerTags());
sp.setAdapter(adapterSpinner);
sp.setOnItemSelectedListener(此);
}
//在微调器上设置标记名称
私有字符串[]setPinnerTags(){
ArrayList结果=新建ArrayList();
while(cursor.moveToNext()){
String tagGet=cursor.getString(cursor.getColumnIndex(DbHandler.TAGS));
如果(!result.contains(tagGet)){
结果。添加(标记);
}
}
spData=新字符串[result.size()];
对于(int i=0;i
请参阅选择和SelectionAgs paramsIm,内容提供商有点新功能。你能给我举个例子吗?这和内容提供商没什么关系,我是说db.QUERI不能理解你的意思。。(创建一个选择,其中第二列=标记)
static int MY_LOADER_ID = 1;
DbHandler myDb;
ListView lv;
CustomCursorAdapter adapter;
ArrayList<Notes> list = new ArrayList<Notes>();
Spinner sp;
String[] spData;
ArrayList<String> sortedList;
ArrayAdapter<String> adapterSpinner;
String category = "";
String note = "";
float set1 = 0;
String set2 = "";
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView1);
lv.setOnItemClickListener(this);
cursor = getContentResolver().query(StatusProvider.CONTENT_URI, null, null, null, null);
adapter = new CustomCursorAdapter(this, cursor, 0);
lv.setAdapter(adapter);
getLoaderManager().initLoader(MY_LOADER_ID, null, this);
sp = (Spinner) findViewById(R.id.spinner1);
adapterSpinner = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, setSpinnerTags());
sp.setAdapter(adapterSpinner);
sp.setOnItemSelectedListener(this);
}
//Set the tags names on the spinner
private String[] setSpinnerTags() {
ArrayList<String> result = new ArrayList<String>();
while (cursor.moveToNext()) {
String tagGet = cursor.getString(cursor.getColumnIndex(DbHandler.TAGS));
if(!result.contains(tagGet)){
result.add(tagGet);
}
}
spData = new String[result.size()];
for (int i = 0; i < result.size(); i++) {
spData[i] = result.get(i);
}
return spData;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
//HERE is the title of th tags
String theTitle = spData[position];
//?????? What i do need the write here?
switch (position) {
case 0:
break;
default:
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(this, StatusProvider.CONTENT_URI, null, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
public void refreshList(){
getLoaderManager().restartLoader(MY_LOADER_ID, null, this);
}
}