Страница 1 из 1

SQLite и ListView

Добавлено: 06 апр 2015, 10:25
lamberto
Всем привет, нужна Ваша помощь все бьюсь и бьюсь.. уже головой...
Короче Есть БД заполняемая входящими SMS, БД класс отдельный, подключение к БД и заполнение производиться в классе исключении где я принимаю SMS,
теперь все ни как немогу подключиться к ней main_activity где её бы следовало загнать в ListView.

Класс БД, в принципе ничего особого тут нет.

Код: Выделить всё

class DBHelper extends SQLiteOpenHelper {

    final String LOG_TAG = "myLogs";

    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                    int version) {
        // конструктор суперкласса
        super(context, "myDB", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(LOG_TAG, "--- onCreate database ---");
        // создаем таблицу с полями
        db.execSQL("create table mytable ("
                + "id integer primary key autoincrement,"
                + "sms text"+ ");");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}


Класс для приёма SMS и записи в БД

Код: Выделить всё

public class IncomingSms extends BroadcastReceiver {


    final SmsManager sms = SmsManager.getDefault();
    EditText etName;
    final String LOG_TAG = "myLogs";
    Context context;

    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM HH:mm ");
    Date currentDate = new Date();


    public void onReceive(Context context, Intent intent) {


        final Bundle bundle = intent.getExtras();
        try {

            if (bundle != null) {

                final Object[] pdusObj = (Object[]) bundle.get("pdus");

                for (int i = 0; i < pdusObj.length; i++) {

                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                    String senderNum = phoneNumber;
                    String message = currentMessage.getDisplayMessageBody();
                    Log.i("SmsReceiver", "Номер отправителя: " + senderNum + "; Cooбщение: " + message);
                    // Show alert
                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context, "Номер отправителя: " + senderNum + ", Cooбщение: " + message, duration);
                        toast.show();


                    // Создание базы данных!
                   DBHelper dbHelper = new DBHelper(context, "myDB", null, 1);
                    ContentValues cv = new ContentValues();

                    SQLiteDatabase db = dbHelper.getWritableDatabase();
                    cv.put("sms", message);
                    Cursor c = db.query("mytable", null, null, null, null, null, null);
                    long rowID = db.insert("mytable", null, cv);
                    Log.d(LOG_TAG, "row inserted, ID = " + rowID + " Текст: " + "sdf.format(currentDate) " +message);
                    dbHelper.close();

                } // end for loop
            } // bundle is null

        } catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" + e);

        }
    }

}



Ну и метод onCreate MainActivity....

Код: Выделить всё

 db = new DBHelper(cont, "myDB", null, 1);
       mDB1 = db.getWritableDatabase();

        cursor = mDB1.query("mytable", null, null, null, null, null, null);
        startManagingCursor(cursor);
      
       String[] from = new String[] { "sms" };
      int[] to = new int[] { R.id.textView1 };

       
       scAdapter = new SimpleCursorAdapter(this, R.layout.itemslid1, cursor, from, to);
        lvmq = (ListView) findViewById(R.id.lvm);
        lvmq.setAdapter(scAdapter);

И при всем, при этом ругается страшным матом!!! на то что я творю в main_activity

Re: SQLite и ListView

Добавлено: 06 апр 2015, 11:32
doter.ua
В андроиде есть своя БД с входящими\исходящими смс\звонками

Re: SQLite и ListView

Добавлено: 06 апр 2015, 11:50
lamberto
Хмм, соответственно можно и фильтр настроить... спасибо, но если есть возможность помочь этот пример допилить?

Re: SQLite и ListView

Добавлено: 06 апр 2015, 12:09
doter.ua
lamberto писал(а):И при всем, при этом ругается страшным матом!!! на то что я творю в main_activity

конкретную строчку с ошибкой ?

Re: SQLite и ListView

Добавлено: 06 апр 2015, 12:29
lamberto
ВОт такой лог выкатывает....

04-06 05:28:14.064 1368-1368/com.example.android.slidingtabscolors W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb3a99ba8)
04-06 05:28:14.104 1368-1368/com.example.android.slidingtabscolors E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.android.slidingtabscolors, PID: 1368
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.slidingtabscolors/com.example.android.slidingtabscolors.MainActivity}: java.lang.IllegalArgumentException: column '_id' does not exist
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
at android.support.v4.widget.CursorAdapter.init(CursorAdapter.java:174)
at android.support.v4.widget.CursorAdapter.<init>(CursorAdapter.java:151)
at android.support.v4.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:93)
at android.support.v4.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:89)
at com.example.android.slidingtabscolors.MainActivity.onCreate(MainActivity.java:87)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

Re: SQLite и ListView

Добавлено: 06 апр 2015, 12:36
lamberto
Если правильно понимаю, то он ругается что ему нужен столбец _ID ?

Re: SQLite и ListView

Добавлено: 06 апр 2015, 12:40
doter.ua
У тебя же ид без нижнего подчеркивания
db.execSQL("create table mytable ("
+ "id integer primary key autoincrement,"
+ "sms text"+ ");");

Re: SQLite и ListView

Добавлено: 06 апр 2015, 12:44
lamberto
Возможно это принципиальная сторона вопроса _Id, но добавив нижнее подчёркивание ничего не изменилось, к сожалению...

Re: SQLite и ListView

Добавлено: 06 апр 2015, 13:04
Foenix
не изменилась, потому что у тебя база данных версию не поменяла, небось.
Обновить ее нужно, либо заново создать.

Re: SQLite и ListView

Добавлено: 06 апр 2015, 13:14
lamberto
Спасибо за ответ, сейчас попробую.

Re: SQLite и ListView

Добавлено: 06 апр 2015, 13:18
lamberto
Пересоздал базу, теперь в гору...
04-06 06:16:25.604 1575-1575/com.example.android.slidingtabscolors E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.android.slidingtabscolors, PID: 1575
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.slidingtabscolors/com.example.android.slidingtabscolors.MainActivity}: android.database.sqlite.SQLiteException: no such table: mytables (code 1): , while compiling: SELECT * FROM mytables

Re: SQLite и ListView

Добавлено: 06 апр 2015, 13:19
lamberto
А понял он не увидел ни одной записи в таблице )) сейчас поправим) и перезапустим.

Re: SQLite и ListView

Добавлено: 06 апр 2015, 13:49
Yennefer
Создаете таблицу "mytable", а запрос делаете к таблице "mytableS" - такой нет у вас в базе.

Re: SQLite и ListView

Добавлено: 06 апр 2015, 13:53
lamberto
Это Вы про логи говорите, там уже пересоздал другую... пока не выходит каменный цветок.
Теперь после добавления _id он и в базу SMS перестал писать(

Re: SQLite и ListView

Добавлено: 06 апр 2015, 14:17
lamberto
Всем ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ!!! Все таки виной всему было _id вот зараза натерпелся от неё)

Re: SQLite и ListView

Добавлено: 06 апр 2015, 14:19
lamberto
Да и на заметку тому кто будет читать этот пост и вдруг так же столкнётся с этой ошибкой, когда исправите обязательно пересоздать базу!!!

Re: SQLite и ListView

Добавлено: 06 апр 2015, 15:39
Foenix
да это настолько элементарнейшая ошибка, что ты такой один, наверное
надеюсь, ты версию менял? а не как-то по-другому?