搜索按钮,显示SqliteDatabase中的项目

时间:2016-05-05 04:07:36

标签: android sqlite

我对android没有经验,我才开始学习它

问题:当我在编辑文本中键入项目的名称时,我希望它显示项目名称,成本,数量等。我不知道是否必须使用按钮,所以当我点击它,我在编辑文本中输入的项目的字段出现,或者是否有不同的方式来显示项目的字段。

public class DatabaseHelper extends SQLiteOpenHelper {


    public static final String DATABASE_NAME = "ShoppingList.db";


    public static final String TABLE_NAME = "list_table";


    public static final String COL_1 = "ID";


    public static final String COL_2 = "NAME";


    public static final String COL_3 = "COST";
    public static final String COL_4 = "QUANTITY";
    public static final String COL_5 = "PURCHASED";
    public static double total;


    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_NAME +
                " (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,COST TEXT, QUANTITY INTEGER,PURCHASED TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public boolean insertData(String name, String cost, String quantity, String purchased) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_2, name);
        contentValues.put(COL_3, cost);
        contentValues.put(COL_4, quantity);
        contentValues.put(COL_5, purchased);
        long result = db.insert(TABLE_NAME, null, contentValues);
        if (result == -1)
            return false;
        else
            return true;
    }

这是我的xml:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editSearch"
    android:layout_gravity="center_horizontal" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/search"
    android:id="@+id/button"
    android:layout_gravity="center_horizontal" />

这是我的搜索类。我什么都没有,因为我不知道该怎么做

public class SearchItem extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_item);


        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Search List");

    }

}

1 个答案:

答案 0 :(得分:0)

这很容易。

首先在您的活动中创建DatabaseHelper类的实例,如下所示。

public class SearchItem extends AppCompatActivity {

DatabaseHelper mDbHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_item);


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Search List");

    mDbHelper = new DatabaseHelper(SearchItem.this);

  }
}

执行此创建方法类型的Cursor后,它返回DatabaseHelper类中的Cursor,以根据您所需的sql查询获取值,如下所示。

public Cursor getValues_Raw(String selectQuery) {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cv = null;
        try {

            cv = mDatabase.rawQuery(selectQuery, null);

        } catch (Exception e) {
          e.printStackTrace();            
        } finally {
            db.close();
        }
        return cv;
    }

现在在您的活动中创建方法以使用Cursor方法获取数据,并使用您在edittext中输入的数据单击按钮调用此方法。如果您想根据名称搜索费用,请按以下方式创建方法

    public void getSearchValueAccordingName(String name){
    String selectQuery = "";
    selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_NAME + " where "+DatabaseHelper.COL_2+ " = " +name;
    Cursor cur = mDbHelper.getValues_Raw(selectQuery);
String cost = "";

    try {
        if (!(cur == null)) {
            if (cur.getCount() > 0) {
                if (cur.moveToFirst()) {
                    do {
                        cost = cur.getString(cur.getColumnIndex(DatabaseHelper.COL_3));
                    } while (cur.moveToNext());
                }
            }

            cur.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

// You can do other thing with your got value. I am showing the toast for demo

Toast.makeText(SearchItem.this, cost, Toast.LENGTH_LONG).show();
        }

从按钮的clicklistner中调用方法getSearchValueAccordingName,然后在此处获得所需的值。在Button的点击列表器中,如下所示。

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = edittext.getText();
getSearchValueAccordingName(name)
            }
        });

最后,您的活动类如下所示。

public class SearchItem extends AppCompatActivity {

        EditText editText;
    Button button;

    DatabaseHelper mDbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_item);


        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Search List");

        mDbHelper = new DatabaseHelper(SearchItem.this);

        editText = (EditText) findViewById(R.id.editSearch);
        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = editText.getText().toString();
                getSearchValueAccordingName(name);
            }
        });
    }

    public void getSearchValueAccordingName(String name){
        String selectQuery = "";
        selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_NAME + " where "+DatabaseHelper.COL_2+ " = " +name;
        Cursor cur = mDbHelper.getValues_Raw(selectQuery);
        String cost = "";

        try {
            if (!(cur == null)) {
                if (cur.getCount() > 0) {
                    if (cur.moveToFirst()) {
                        do {
                            cost = cur.getString(cur.getColumnIndex(DatabaseHelper.COL_3));
                        } while (cur.moveToNext());
                    }
                }

                cur.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // You can do other thing with your got value. I am showing the toast for demo

        Toast.makeText(SearchItem.this, cost, Toast.LENGTH_LONG).show();
    }
}