Получение деталей из КЭША (SQLITE) и отображение в ANDROID

У меня есть две таблицы в моей базе данных. В моем коде есть логика получения сведений о любой таблице путем проверки наличия в любой таблице. Это происходит в двух классах. Когда я запускаю приложение в первый раз, оно будет получать все данные из кеша до некоторого времени, а затем останавливается. В другом классе работает та же логика, но работает нормально. Я почти потратил два дня, чтобы решить эту проблему, но не повезло. Вот прилагаю свой Logcat и код. Пожалуйста, кто-нибудь может помочь. Спасибо

КЛАСС SQLITEHELPER

public MysqliteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
         //this.myDatabase = this.getWritableDatabase();
    }

    /*
     * public void SQLiteDatabase(){
     * 
     * }
     */
    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(STORE_CACHE_BOOK_TABLE_CREATE);
        database.execSQL(STORE_CACHE_COMMENTS_TABLE_CREATE);
        database.execSQL(USER_LOGIN_CREDENTIALS_TABLE_CREATE);
        database.execSQL(USER_LIBRARY_DETAILS_TABLE_CREATE);
        database.execSQL(USER_STORE_DETAILS);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(MysqliteHelper.class.getName(),
                "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
        // database.execSQL("DROP TABLE IF EXISTS " + StoreBookCache);
        onCreate(db);
    }

    /* Insert Values for Book_DESCRIPTION_OF_STORE */

    public void insertStoreBookDetailsIntoCache(String prod_str_Id,
            String prod_str_desc, String prod_str_Name, String prod_str_author,
            String prod_str_price, String prod_str_currency)
            throws SQLException {
        myDatabase = this.getWritableDatabase();


        Log.d("INeer'", "INSERT METHOD" + myDatabase.getPageSize());

        ContentValues contentValues = new ContentValues();
        // Put the values for Store Table.
        contentValues.put(CONST_STR_BOOK_ID, prod_str_Id);
        contentValues.put(CONST_STR_PROD_DESCR, prod_str_desc);
        contentValues.put(CONST_STR_PROD_NAME, prod_str_Name);
        contentValues.put(CONST_STR_PROD_AUTHOR, prod_str_author);
        contentValues.put(CONST_STR_PROD_PRICE, prod_str_price);
        contentValues.put(CONST_STR_PROD_CUR, prod_str_currency);

        myDatabase
                .insertOrThrow(CONST_TABLE_STORE_DETAILS, null, contentValues);

    //myDatabase.close();

    }
    public static final String Book_STR_Id = "book_str_Id";
    public static final String Book_STR_des = "book_str_des";
    public static final String Book_STR_name = "book_str_name";
    public static final String Book_STR_author = "book_str_author";
    public static final String Book_STR_price = "book_str_price";
    public static final String Book_STR_curr = "book_str_curr";

    public  Map<String, String> getStoreItemsDetails_FromCache(String Bookstrid) {
        Map<String, String> storeItemsDetails = new HashMap<String, String>();
        myDatabase = this.getReadableDatabase();
        /*final String IS_BOOK_IN_STR_CACHE_DETAILS = "SELECT  * FROM  "
            + CONST_TABLE_STORE_DETAILS + " WHERE "+ CONST_STR_BOOK_ID + "="+ Bookstrid;*/

    /*  Cursor cur = myDatabase.query(IS_BOOK_IN_STR_CACHE_DETAILS,
                new String[] { CONST_STR_BOOK_ID, CONST_STR_PROD_DESCR,
                        CONST_STR_PROD_NAME, CONST_STR_PROD_AUTHOR,
                        CONST_STR_PROD_PRICE, CONST_STR_PROD_CUR }, null, null,
                null, null, null, null);*/

        Cursor cur = myDatabase.query(CONST_TABLE_STORE_DETAILS,
                new String[] { CONST_STR_BOOK_ID, CONST_STR_PROD_DESCR,
                        CONST_STR_PROD_NAME, CONST_STR_PROD_AUTHOR,
                        CONST_STR_PROD_PRICE, CONST_STR_PROD_CUR }, CONST_STR_BOOK_ID + "="+ Bookstrid, null,
                null, null, null, null);


        if (cur.getCount() <= 0)
            return storeItemsDetails;

        cur.moveToFirst();
        while (!cur.isAfterLast()) {
            String book_storeId = cur.getString(0);
            String book_storedesc = cur.getString(1);
            String book_storename = cur.getString(2);
            String book_storeauthor = cur.getString(3);
            String book_storeprice = cur.getString(4);
            String book_storecurr = cur.getString(5);

            Log.d(MysqliteHelper.class.getName(), String.format(
                    "Fetched Book : %s and its cover location on SD Card :%s",
                    book_storeId, book_storedesc, book_storename,
                    book_storeauthor, book_storeprice, book_storecurr));
            storeItemsDetails.put(Book_STR_Id, book_storeId);// ,
                                                                    // book_storedesc,book_storename,book_storeauthor,book_storeprice,book_storecurr
            storeItemsDetails.put(Book_STR_des, book_storedesc);
            storeItemsDetails.put(Book_STR_name, book_storename);
            storeItemsDetails.put(Book_STR_author, book_storeauthor);
            storeItemsDetails.put(Book_STR_price, book_storeprice);
            storeItemsDetails.put(Book_STR_curr, book_storecurr);

            cur.moveToNext();
        }

        cur.close();
        // myDatabase.close();
        return storeItemsDetails;
    }

    /* Insert Values for Book_DESCRIPTION_OF_LIBRARY */

    public void insertLibraryBookDetailsIntoCache(String prod_lib_Id,
            String prod_lib_desc, String prod_lib_Name, String prod_lib_author,
            String prod_lib_price, String prod_lib_currency)
            throws SQLException {
        myDatabase = this.getWritableDatabase();

        ContentValues contentValues = new ContentValues();
        // Put the values for Store Table.
        contentValues.put(CONST_LIB_BOOK_ID, prod_lib_Id);
        contentValues.put(CONST_LIB_PROD_DESCR, prod_lib_desc);
        contentValues.put(CONST_LIB_PROD_NAME, prod_lib_Name);
        contentValues.put(CONST_LIB_PROD_AUTHOR, prod_lib_author);
        contentValues.put(CONST_LIB_PROD_PRICE, prod_lib_price);
        contentValues.put(CONST_LIB_PROD_CUR, prod_lib_currency);

        myDatabase.insertOrThrow(CONST_TABLE_LIBRARY_DETAILS, null,
                contentValues);
        //myDatabase.close();
    }
    public static final String Book_LIB_Id = "book_lib_Id";
    public static final String Book_LIB_des = "book_lib_des";
    public static final String Book_LIB_name = "book_lib_name";
    public static final String Book_LIB_author = "book_lib_author";
    public static final String Book_LIB_price = "book_lib_price";
    public static final String Book_LIB_curr = "book_lib_curr";
    public Map<String, String> getLibraryItemsDetails_FromCache(String BooklibId) {
        Map<String, String> libraryItemsDetails = new HashMap<String, String>();
        myDatabase = this.getReadableDatabase();
    /*   String IS_BOOK_IN_LIB_CACHE_DETAILS = "SELECT  * FROM  "
            + CONST_TABLE_LIBRARY_DETAILS + " WHERE "+ CONST_LIB_BOOK_ID +"="+ BooklibId;*/


        Cursor cur = myDatabase.query(CONST_TABLE_LIBRARY_DETAILS,
                new String[] { CONST_LIB_BOOK_ID, CONST_LIB_PROD_DESCR,
                        CONST_LIB_PROD_NAME, CONST_LIB_PROD_AUTHOR,
                        CONST_LIB_PROD_PRICE, CONST_LIB_PROD_CUR }, CONST_LIB_BOOK_ID +"="+ BooklibId , null,
                null, null, null, null);
        if (cur.getCount() <= 0)
            return libraryItemsDetails;

        cur.moveToFirst();
        while (!cur.isAfterLast()) {
            String book_libraryId = cur.getString(0);
            String book_librarydesc = cur.getString(1);
            String book_libraryname = cur.getString(2);
            String book_libraryauthor = cur.getString(3);
            String book_libraryprice = cur.getString(4);
            String book_librarycurr = cur.getString(5);

            Log.d(MysqliteHelper.class.getName(), String.format(
                    "Fetched Book : %s and its cover location on SD Card :%s",
                    book_libraryId, book_librarydesc, book_libraryname,
                    book_libraryauthor, book_libraryprice, book_librarycurr));
            libraryItemsDetails.put("book_lib_Id", book_libraryId);// ,
                                                                        // book_storedesc,book_storename,book_storeauthor,book_storeprice,book_storecurr
            libraryItemsDetails.put(Book_LIB_des, book_librarydesc);
            libraryItemsDetails.put(Book_LIB_name, book_libraryname);
            libraryItemsDetails.put(Book_LIB_author, book_libraryauthor);
            libraryItemsDetails.put(Book_LIB_price, book_libraryprice);
            libraryItemsDetails.put(Book_LIB_curr, book_librarycurr);

            cur.moveToNext();
        }

        cur.close();
        //myDatabase.close();
        return libraryItemsDetails;
    }

    /*
     * public void updateStoreCacheWithDetails(String prod_str_Id, String
     * prod_str_desc, String prod_str_Name, String prod_str_author, String
     * prod_str_price, String prod_str_currency){ Log.d(
     * MysqliteHelper.class.getName(), String.format(
     * "Local Image Location: %s, URL :%s", prod_str_Id,
     * prod_str_desc,prod_str_Name,
     * prod_str_author,prod_str_price,prod_str_currency) ); myDatabase =
     * this.getWritableDatabase(); ContentValues contentValues = new
     * ContentValues(); contentValues.put(CONST_STR_BOOK_ID, prod_str_Id);
     * contentValues.put(CONST_STR_PROD_DESCR, prod_str_desc);
     * contentValues.put(CONST_STR_PROD_NAME, prod_str_Name);
     * contentValues.put(CONST_STR_PROD_AUTHOR, prod_str_author);
     * contentValues.put(CONST_STR_PROD_PRICE, prod_str_price);
     * contentValues.put(CONST_STR_PROD_CUR, prod_str_currency);
     * 
     * 
     * myDatabase.update( CONST_TABLE_STORE_CACHE , contentValues,
     * CONST_STR_BOOK_ID+"=?", new String[] { prod_str_Id });
     * //myDatabase.close(); }
     */

    public void updateStoreCacheWithLocalImageLocation(
            String localImageLocation, String imageURLOnServer) {
        Log.d(MysqliteHelper.class.getName(), String.format(
                "Local Image Location: %s, URL :%s", localImageLocation,
                imageURLOnServer));
        myDatabase = this.getWritableDatabase();
        //SQLiteDatabase.openDatabase(DATABASE_NAME, null, 0);



        ContentValues contentValues = new ContentValues();
        contentValues.put(CONST_LOCAL_IMAGE_PATH, localImageLocation);

        myDatabase.update(CONST_TABLE_STORE_CACHE, contentValues,
                CONST_IMAGE_URL + "=?", new String[] { imageURLOnServer });
    // myDatabase.close();
    }

    public void insertStoreBookIntoCache(String bookId, String bookName,
            String author, String publisher, String description,
            String priceValue, String priceCurrency, String averageRating,
            String imageUrl, String localImagePath) throws SQLException {
        myDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();

        // Put the values for Store Table.
        contentValues.put(CONST_BOOK_ID, bookId);
        contentValues.put(CONST_BOOK_NAME, bookName);
        contentValues.put(CONST_BOOK_DESCRIPTION, description);
        contentValues.put(CONST_AVERAGE_RATING, averageRating);
        contentValues.put(CONST_IMAGE_URL, imageUrl);
        Log.d(MysqliteHelper.class.getName(), "Image URL is :" + imageUrl);
        myDatabase.insertOrThrow(CONST_TABLE_STORE_CACHE, null, contentValues);
        //myDatabase.close();
    }

    public boolean isStoreCacheEmpty() {
        myDatabase =this. getReadableDatabase();
        Cursor cur = myDatabase.query(CONST_TABLE_STORE_CACHE,
                new String[] { CONST_BOOK_ID }, null, null, null, null, null);
        boolean isEmpty = cur.getCount() <= 0;
        cur.close();
    //  myDatabase.close();
        return isEmpty;
    }

    public void insertStoreBookCommentsIntoCache(String comment, String userId,
            String bookId) throws SQLException {
        myDatabase = this.getWritableDatabase();

        ContentValues contentValues = new ContentValues();

        // Put the values for Store Table.
        contentValues.put(CONST_COMMENT_BOOK_ID, bookId);
        contentValues.put(CONST_COMMENT_TEXT, comment);
        contentValues.put(CONST_COMMENT_USER_ID, userId);

        myDatabase
                .insertOrThrow(CONST_TABLE_BOOK_COMMENTS, null, contentValues);
        //myDatabase.close();
    }

    public int rollBackStoreBookCacheRecord(String bookId) {
        myDatabase = this.getWritableDatabase();

        int status = myDatabase.delete(CONST_TABLE_STORE_CACHE, CONST_BOOK_ID
                + "=?", new String[] { bookId });

        //myDatabase.close();

        return status;
    }

    public Map<String, String> getStoreItemsFromCache() {
        Map<String, String> storeItems = new HashMap<String, String>();
        myDatabase = this.getReadableDatabase();
        Cursor cur = myDatabase.query(CONST_TABLE_STORE_CACHE, new String[] {
                CONST_BOOK_ID, CONST_LOCAL_IMAGE_PATH }, null, null, null,
                null, null);
        if (cur.getCount() <= 0)
            return storeItems;

        cur.moveToFirst();
        while (!cur.isAfterLast()) {
            String bookId = cur.getString(0);
            String bookCoverLocationOnSDCard = cur.getString(1);

            Log.d(MysqliteHelper.class.getName(), String.format(
                    "Fetched Book : %s and its cover location on SD Card :%s",
                    bookId, bookCoverLocationOnSDCard));
            storeItems.put(bookId, bookCoverLocationOnSDCard);

            cur.moveToNext();

        }
        cur.close();

        //myDatabase.close();
        return storeItems;
    }

    /*
     * public ArrayList getStoreBooksInCache() { myDatabase =
     * this.getReadableDatabase(); ArrayList prodIDs = new ArrayList();
     * 
     * Cursor cur = myDatabase.query( CONST_TABLE_STORE_CACHE , new String[]
     * {CONST_BOOK_ID},null, null, null, null, null); if( cur.getCount() <= 0 )
     * return prodIDs;
     * 
     * cur.moveToFirst(); while( ! cur.isAfterLast() ) {
     * prodIDs.add(cur.getString(0)); cur.moveToNext(); } cur.close(); return
     * prodIDs; }
     */

    public void insertintoUserCredentialTable(String username, String password)
            throws SQLException {
        myDatabase = this.getWritableDatabase();

        ContentValues contentValues = new ContentValues();

        contentValues.put(CUR_USERNAME, username);
        contentValues.put(CUR_PASSWORD, password);
        String countQuery = "SELECT  * FROM " + USER_LOGIN_CREDENTIALS;
        int userCount = 0;
        Cursor  cur = myDatabase.rawQuery(countQuery, null);
        System.out.println("cursor count" + cur.getCount());
        if (cur.getCount() < 1)
            userCount = 1;
        cur.close();
        if (userCount == 1)
            myDatabase.insertOrThrow(USER_LOGIN_CREDENTIALS, null,
                    contentValues);
        else
            myDatabase
                    .update(USER_LOGIN_CREDENTIALS, contentValues, null, null);
        cur.close();
        //myDatabase.close();
    }

    public static final String CONST_USER_NAME_KEY = "cached_username";
    public static final String CONST_USER_PASSWORD_KEY = "cached_password";

    public Map<String, String> getUserCreds() {
        Map<String, String> userLogs = new HashMap<String, String>();
        myDatabase = this.getReadableDatabase();
        Cursor cur = myDatabase.query(USER_LOGIN_CREDENTIALS, new String[] {
                CUR_USERNAME, CUR_PASSWORD }, null, null, null, null, null,
                null);
        // System.out.println("cursor" +cur.toString());
        Log.d("cursorrrr", cur.toString());
        // startManagingCursor(cur);
        cur.moveToFirst();
        while (!cur.isAfterLast()) {
            String cachedUsername = cur.getString(0);
            String cachedPassword = cur.getString(1);
            Log.d(MysqliteHelper.class.getName(), String.format(
                    "Fetched credentials : %s and password :%s",
                    cachedUsername, cachedPassword));
            userLogs.put(CONST_USER_NAME_KEY, cachedUsername);
            userLogs.put(CONST_USER_PASSWORD_KEY, cachedPassword);

            cur.moveToNext();


        }
        cur.close();

        //myDatabase.close();
        // myDatabase.close();
        return userLogs;

    }

    public static final int BOOK_DETAILS_IN_STORE_CACHE = 2;
    public static final int BOOK_DETAILS_IN_LIBRARY_CACHE = 1;

    private static final String IS_BOOK_IN_LIBRARY_CACHE = "SELECT " +CONST_LIB_BOOK_ID + " FROM " 
            + CONST_TABLE_LIBRARY_DETAILS + " WHERE "+  CONST_LIB_BOOK_ID +"=?";
    private static final String IS_BOOK_IN_STORE_CACHE = "SELECT " +CONST_STR_BOOK_ID + " FROM " 
            + CONST_TABLE_STORE_DETAILS + " WHERE "  + CONST_STR_BOOK_ID + "=?";

    public int isBookInCache(String bookId) {
        myDatabase = this.getReadableDatabase();
        //myDatabase = this.getWritableDatabase();
        Cursor cur = myDatabase.rawQuery(IS_BOOK_IN_LIBRARY_CACHE,
                new String[] { bookId });
        if (cur.getCount() > 0) {
            return BOOK_DETAILS_IN_LIBRARY_CACHE;
        } else {
            cur = myDatabase.rawQuery(IS_BOOK_IN_STORE_CACHE,
                    new String[] { bookId });
            if (cur.getCount() > 0) {
                return BOOK_DETAILS_IN_STORE_CACHE;
            }
        }
        cur.close();
        //myDatabase.close();
        return -1;

    } 

ДЕЯТЕЛЬНОСТЬ Вот проверяю наличие книги в столе

MysqliteHelper sqlhelpe = new MysqliteHelper(this);
         result = sqlhelpe.isBookInCache(Book_Id);
        Log.d("Book details are in :" + result,"");
        if (result == sqlhelpe.BOOK_DETAILS_IN_LIBRARY_CACHE) {
            BookDetailsScreen bkds=new BookDetailsScreen();
            System.out.println(Book_Id);
            // bkds.GetLibDetails(Book_Id);
            GetLibDetails(Book_Id);
            Log.d("Getting book details from Library cache","");
            // Get the details from Library cache
        } else if (result == sqlhelpe.BOOK_DETAILS_IN_STORE_CACHE) {
            GetStrDetails(Book_Id);
            Log.d("Getting book details from store cache","");
            // Get the details from Store cache
        } else {
            Log.d("Getting book details from the server","");
            new AsyncBookDetail_Store().execute("");

        }

Здесь я получаю подробности в деятельности:

public String GetStrDetails(String book_Id){
        // HashMap<String, String> cachedProdLib = new HashMap<String, String>();

        Map<String, String> cachestr = sqlHelper.getStoreItemsDetails_FromCache(book_Id);
        //if (!cachestr.entrySet().isEmpty()) {     //Iterator<String> LibbookIds = cachedProdList.keySet().iterator();
             //String StrBook_Id=cachedProdList.get("book_lib_Id");
            StrBook_Id=cachestr.get(MysqliteHelper.Book_STR_Id);
             //Log.d(StrBook_Id, "Book Id Fom Data base");
              StrBook_Name=cachestr.get(MysqliteHelper.Book_STR_name);
              StrBook_Desc=cachestr.get(MysqliteHelper.Book_STR_des);
              StrBook_author=cachestr.get(MysqliteHelper.Book_STR_author);
              StrBook_Price=cachestr.get(MysqliteHelper.Book_STR_price);
              StrBook_Curr=cachestr.get(MysqliteHelper.Book_STR_curr);
             Message myMessage = new Message();
                Bundle resBundle = new Bundle();
                resBundle.putString("descripti",
                        StrBook_Desc);
                resBundle.putString("book_Name",
                        StrBook_Name);
                resBundle.putString("author", StrBook_author);
                resBundle.putString("price",StrBook_Price);
                resBundle.putString("currency",
                        StrBook_Curr);

                myMessage.setData(resBundle);
                handler.sendMessage(myMessage);
        //}

        return null;

    }

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


person Hema    schedule 22.08.2012    source источник


Ответы (1)


Кроме того, вы должны быть уверены, что используете один экземпляр класса SQLiteOpenHelper, поскольку использование нескольких экземпляров SQLiteOpenHelper для одной и той же базы данных не поддерживается и приводит именно к той проблеме, с которой вы столкнулись.

Привет dhaag23, Спасибо за ответ. Я изменил код. Я создал только один экземпляр MYSQLITEHELPER в классах. Но теперь он показывает детали только для нескольких книг. И когда я вытащил БД из своего эмулятора, у него была вся книга.

person dhaag23    schedule 22.08.2012
comment
Сценарий таков: сначала я смогу видеть все данные из кеша, но иногда он перестает получать данные из кеша, даже если он вставлен. LOG CAT 08-23 03:27:32.774: E/Database(1093): close() никогда явно не вызывалась для базы данных '/data/data/com.pumpkynhead.ebookportal.ebook/databases/Books.db' 08-23 03:27:32.774: E/Database(1093): android.database.sqlite.DatabaseObjectNotClosedException: приложение не закрыло курсор или объект базы данных, который был открыт здесь 08-23 03:27:32.774: E/Database(1093): в android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1810) 08-23 03:27:32.774: E/Database(1093): в android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817) 08 -23 03:27:32.774: E/база данных (1093): в android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851) 08-23 03:27:32.774: E/база данных (1093): в android .database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844) 08-23 03:27:32.774: E/Database(1093): в android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540) 08-23 03 :27:32.774: E/База данных(1093): в android.content.ContextWrapp er.openOrCreateDatabase(ContextWrapper.java:203) 08-23 03:27:32.774: E/Database(1093): в android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 08-23 03:27: 32.774: E/Database(1093): в android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158) 08-23 03:27:32.774: E/Database(1093): в com.pumpkynhead.ebookportal.ebook .util.MysqliteHelper.isBookInCache(MysqliteHelper.java:510) 08-23 03:27:32.774: E/Database(1093): at com.pumpkynhead.ebookportal.ebook.BookDetailsScreen_Store.onCreate(BookDetailsScreen_Store.java:104) 08- 23 03:27:32.774: E/база данных(1093): в android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 08-23 03:27:32.774: E/база данных(1093): в android.app. ActivityThread.performLaunchActivity(ActivityThread.java:2627) 08-23 03:27:32.774: E/Database(1093): в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 08-23 03:27:32.774: E/база данных (1093): в android.app.A ctivityThread.access$2300(ActivityThread.java:125) 08-23 03:27:32.774: E/Database(1093): в android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 08-23 03:27 :32.774: E/база данных(1093): на android.os.Handler.dispatchMessage(Handler.java:99) 08-23 03:27:32.774: E/база данных(1093): на android.os. Looper.loop(Looper.java:123) 08-23 03:27:32.774: E/Database(1093): в android.app.ActivityThread.main(ActivityThread.java:4627) 08-23 03:27:32.774: E/Database(1093): в java.lang.reflect.Method.invokeNative(собственный метод) 08-23 03:27:32.774: E/Database(1093): в java.lang.reflect.Method.invoke(Method. java:521) 08-23 03:27:32.774: E/Database(1093): в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 08-23 03:27:32.774: E/Database(1093): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 08-23 03:27:32.774: E/Database(1093): на dalvik.system.NativeStart.main (Собственный метод) - person Hema; 23.08.2012