Получите повторные записи для некоторых элементов в базе данных! - PullRequest
0 голосов
/ 28 июля 2011

Я работаю над приложением для Android. В котором у меня есть слайд-шоу. Я анализирую их через XML и после анализа сохраняю в БД SQLite. Большинство слайд-шоу сохраняются должным образом, но иногда это происходит, когда слайды сохраняются два раза, то есть каждый слайд в слайд-шоу сохраняется два раза, очевидно, с разным ПК, но с одинаковым содержимым. чего следует избегать.

Здесь есть частичный код, где я получаю слайды и пытаюсь сохранить их в БД.

      ArrayList<SlideShowItem> slideItems = null;

      slideItems=Utils.database.getSlideItemOfUrl(Constants.StoriesTable,tempSlideShow.getFullStoryUrl().substring(0, index - 1), type);

                        if (slideItems == null) {
                            Log.d("store in DB: ", " when SlideItems == null ");

                            Log.d("SlideShow Title:   ", tempSlideShow.getTitle());
                            Log.d("SlideShow pub Date:   ", tempSlideShow.getPubDate());

                            slideItems = tempSlideShow.getSlideShow();
                            Utils.database.storeSlideItem(Constants.StoriesTable, myUrl,slideItems, type);
                            Utils.topStorySlidesArrayList = slideItems;
                            slideItems = null ;

                        } else {
                            Log.d("SlideShow Title:   ", tempSlideShow.getTitle());
                            Utils.topStorySlidesArrayList = slideItems;
                            slideItems = null ;
                        } 

и код функции storeSlideItem в базе данных:

 public synchronized void storeSlideItem(String tableName, String, url,ArrayList<SlideShowItem> list, String type) {

    System.out.println("size of the Array list:   " + list.size());

    String newType = null;
    if (type == null) {
        newType = "List";
    }else{
        newType = type;
    }   

    ArrayList<SlideShowItem> newList = new ArrayList<SlideShowItem>();
    //newList = null;
    Iterator<SlideShowItem> iterator = list.iterator();

    while (iterator.hasNext())
    {
        SlideShowItem sSItem = iterator.next();
        if(!newList.contains(sSItem))
        {
            newList.add(sSItem);
        }  
    }

    try {
        for (int i = 0; i < newList.size(); i++) {
            SlideShowItem item = newList.get(i);
            String itemUrl = url + i;// Unique URL for the DB;
            String imgString = null;

            Log.e("Loop Counter", " time " + i);

            Drawable drawable = item.getImage();
            if (item.getBody() != null) {
                item.setBody(item.getBody().replace('\'', '`'));
                // replace as it create syntax error for storing data
            }
            if (item.getSubTitle() != null) {
                item.setSubTitle(item.getSubTitle().replace('\'', '`'));
            }

            if (drawable != null) {
                Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);

                byte[] b = baos.toByteArray();
                imgString = Base64.encodeBytes(b);
            }

            if (isOpen()) {
                myDB.execSQL("INSERT INTO " + tableName + "(" + column[1] + "," + column[2] + "," + column[3] + "," + column[4] + "," + column[6]
                        + "," + column[7] + ",type) VALUES('" + itemUrl + "','" + item.getSubTitle() + "','" + item.getBody() + "','"
                        + item.getImagePath() + "','" + item.getIndex() + "','" + imgString  + "','" + newType + "Slide')");


                if (item.getBody() != null) {
                    item.setBody(item.getBody().replace('`', '\''));// " ' "
                    // replace as it create syntax error for storing data
                }
                if (item.getSubTitle() != null) {
                    item.setSubTitle(item.getSubTitle().replace('`', '\''));
                }

                if (tableName.equals(Constants.StoriesTable)) {
                    item.setItemId(getItemID(tableName, itemUrl));
                    Utils.hashListStoriesIds.put(itemUrl, item.getItemId());

                    if (imgString != null) {
                        Utils.hashListImages.put(item.getItemId(), new Boolean(true));
                    } else {
                        Utils.hashListImages.put(item.getItemId(), new Boolean(false));
                    }
                }
            }   
        }
    } catch (Exception e) {
        Log.e("Error", "Exception: storeSlideItem type " + e.toString());
    } finally {
        closeConnection();
    }

}

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

в БД для дублирования слайдов вид выглядит примерно так:

1 abc США 111

2 ABC США 111

и так далее для одного слайда слайд-шоу. если у меня есть 3 слайда в слайд-шоу, я получу 6 записей в БД, каждый слайд будет сохранен два раза.

1 Ответ

0 голосов
/ 28 июля 2011

Используйте HashSet вместо ArrayList

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