Получение значений базы данных в операторе if

У меня есть база данных, содержащая несколько телефонных номеров. Мне нужно проверить, содержит ли база данных конкретный номер. Как мне получить значения базы данных в операторе if? Стоит ли использовать список массивов?

Это то, чем я занимаюсь до сих пор ..

@Override
public void onReceive(Context context, Intent intent) {
Bundle bund=intent.getExtras();
String space="";

if(bund!=null) {  
Object[] smsExtra = (Object[]) bund.get(SMS_EXTRA_NAME);

for (int i = 0; i < smsExtra.length; i++) {
SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]);
body = sms.getMessageBody().toString();
address = sms.getOriginatingAddress();

db = openOrCreateDatabase("Admindb", MODE_PRIVATE, null);
Cursor crs = db.rawQuery("select * from adminstbl", null);
String[] str= new String[crs.getCount()];
crs.moveToFirst();
for(int k=0;k<str.length;k++)
{
str[k] = crs.getString(crs.getColumnIndex("Number"));
crs.moveToNext();
}

if (address.equals(str)){
 //do my task here
}

person shinilms    schedule 28.11.2015    source источник
comment
вы хотите использовать SQL, чтобы сделать query в своей базе данных. developer.android.com/training/basics/data-storage/. Вы захотите сделать selection на основе определенного числа   -  person Blundell    schedule 28.11.2015
comment
что я пытаюсь сделать, так это то, что пользователь вводит какой-то номер телефона в начале приложения, и когда получено sms, я хочу проверить, пришло ли sms с любого номера, который пользователь ввел ранее, и выполнить некоторые задачи на основе этого . как мне это сделать??   -  person shinilms    schedule 28.11.2015
comment
Вы можете сделать это, прочитав URL-адрес, который я указал выше. Тогда ваш следующий вопрос, вероятно, будет таким: stackoverflow.com/questions/1243199/   -  person Blundell    schedule 28.11.2015


Ответы (1)


Во-первых, в коде активности вы можете оценить свою базу данных с помощью курсора.

 Cursor numberCursor = mDbHelper.fetchRecord(mPhoneNumber);

Вот пример кода, который будет у вас в обработчике базы данных.

public Cursor fetchRecord(long mPhoneNumber) throws SQLException {

    Cursor mCursor = mDb.query(true, ACCOUNTS_TABLE, new String[]{
                    ACCOUNTS_ROWID, ACCOUNTS_NAME, ACCOUNTS_ADDRESS,
                    ACCOUNTS_PHONENUMBER}, ACCOUNTS_PHONENUMBER+ "=" + mPhoneNumber, null, null,
            null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

Часть, которая читает ACCOUNTS_PHONENUMBER + "=" + mPhoneNumber в запросе курсора, ищет любые записи, которые соответствуют числу, которое вы передали из действия. Курсор вернет только записи с этим номером.

Наконец, вернувшись к своей деятельности, после первой строки кода, показанного выше, вы можете поместить оператор if для проверки возвращаемого значения.

  mReturnedNumber = numberCursor.getLong(3);
    if (mReturnedNumber != null){
// You may now use the number here since it is not null
}

Для получения дополнительной информации о запросах Sqlite перейдите по этой ссылке.

Вот пример кода для одного из комментариев ниже.

 Cursor mCursor = mDb.query(true, ACCOUNTS_TABLE, new String[]{
                ACCOUNTS_ROWID, ACCOUNTS_NAME, ACCOUNTS_ADDRESS,
                ACCOUNTS_PHONENUMBER}, ACCOUNTS_PHONENUMBER+ "=" + mPhoneNumber + " OR " + ACCOUNTS_PHONENUMBER_2 + "=" + mPhoneNumber, null, null,
        null, null, null);

Обратите внимание, что в запросе теперь есть оператор OR.

person Eric Engel    schedule 28.11.2015
comment
спасибо за ответы. я попробую и дам знать, сработает ли - person shinilms; 28.11.2015
comment
@Shinil - Как я использовал оператор запроса, будет возвращено только совпадающее значение. Нет необходимости писать код, который просматривает все записи, чтобы найти совпадение. Изучите информацию по ссылке, которую я поместил в своем ответе, и я думаю, вы обнаружите, что фреймворк Sqlite облегчит вашу жизнь. - person Eric Engel; 28.11.2015
comment
но могу ли я проверить с его помощью несколько номеров? хотите больше одного телефонного номера? - person shinilms; 29.11.2015
comment
@shinil - можешь привести пример? Вы имеете в виду несколько чисел в одном запросе? - person Eric Engel; 29.11.2015
comment
Предположим, пользователь добавляет 4 разных телефонных номера в начале приложения. и когда получено смс, мне нужно проверить, пришло ли смс с любого из номеров, которые пользователь добавил ранее. то есть, если исходный адрес смс совпадает с любым из моих номеров в базе данных, то мне нужно выполнить некоторые действия. иначе ничего не делать. - person shinilms; 29.11.2015
comment
Я предполагаю, что 4 числа были введены в базу данных для этого пользователя. Тогда вам просто нужно поискать в базе данных совпадение по количеству входящих смс. В зависимости от того, как вы структурируете таблицы базы данных, у вас может быть несколько записей для пользователей с более чем одним номером или вы можете разрешить до фиксированного количества номеров для каждого пользователя и оставить каждого пользователя в одной строке. Если у пользователя есть несколько чисел в одной строке (более одного столбца чисел), вам просто нужно, чтобы запрос смотрел на каждый столбец чисел для этого числа. Я включаю пример синтаксиса для последнего случая. - person Eric Engel; 29.11.2015
comment
Позвольте нам продолжить это обсуждение в чате. - person Eric Engel; 29.11.2015