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
  • 电影蜘蛛侠
我知道如何在常规方法中使用一些for循环来实现这一点,例如:

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);
    }

}