Pull to refresh

Comments 12

Плюс, выскочила проблема создания/закрытия транзакции. Транзакция открывается в одном классе, а закрывается в другом, что так же выглядит не самым лучшим образом с точки зрения разработки. Пока эту «оплошность» я не смог «красиво» исправить.

«Оплошность»?!?! Вы серьезно??
Пока не знаю, как сделать это «красиво».
По этому здесь вопрос в руках разработчика. Заметьте, транзакции у меня все закрываются. Именно по этому, я отнёс это в разряд красивостей/«оплошностей»
Если разобрать по кусочкам, то:
Вы в класе DatabaseConfig создаете объект Environment, из него получаете методом beginTransaction конкретную транзацкию(вы не в DatabaseConfig открываете, а его методом с его настройками, получаете), и потом в том же контексте её закрываете методом commit. Почему вы написали что создаете в одном закрываете в другом?
Мне такое решение режет глаз, да ещё при условии, что транзакцию надо открывать для получения всего лишь следующего элемента в последовательности.
Удачи с отображением данных в списках и прочих AdapterView.
Мне AdapterView не подходит по умолчанию. У меня уровень отображения данных сильно отличается от уровня представления данных. Лично для меня прокидывать «сырые» данные прямо в уровень отображения — плохая норма.
В исходниках есть пример для Android и вложен класс JECursosAdapter и пример его работы в ListActivity. Так что с «удачей» все в порядке:
Код примера
public class JECursorAdapterExample extends ListActivity {
    private final int RECORDNUM = 5000;
    private final int KEYRANGEMIN = 0;
    private final int KEYRANGEMAX = 4999;
    private final String DBPATH = "data/tmp/JECursorAdapterDemo";
    
    private File myDbEnvPath = new File(DBPATH);
    private DataAccessor da;
    private static MyDbEnv myDbEnv = new MyDbEnv();
    private EntityCursor<Data> valueCursor;
    private EntityCursor<Integer> keyCursor;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myDbEnv.setup(myDbEnvPath, false /*read-only*/);  
        da = new DataAccessor(myDbEnv.getEntityStore());
        
        /* If there is no data, then load the data into JE DB. */
        if (da.dataByKey.count() == 0) {
            LoadJEData();
        }
        ReadJEDataFromCursor();
        setListAdapter(new JECursorAdapter<Integer, Data>
                       (this, android.R.layout.simple_list_item_1, 
                        keyCursor, valueCursor, da.dataByKey));
                       
        /* Jump to a specific position. */
        final Button buttonJump = (Button) findViewById(R.id.jump);
        buttonJump.setOnClickListener(new Button.OnClickListener() {
                public void onClick(View v) {
                    final EditText editText =
                        (EditText) findViewById(R.id.position);
                    int position = Integer.
                        valueOf(editText.getText().toString());
                    position = position < KEYRANGEMIN ? 
                               KEYRANGEMIN : 
                               position;
                    position = position > KEYRANGEMAX ? 
                               KEYRANGEMAX : 
                               position;
                    getListView().setSelection(position);
                }
            });
        
        /* Jump to the beginning of the database. */
        final Button buttonJumpStart = (Button) findViewById(R.id.jump_start);
        buttonJumpStart.setOnClickListener(new Button.OnClickListener() {
                public void onClick(View v) {
                    getListView().setSelection(KEYRANGEMIN);
                }
            });
        
        /* Jump to the end of the database. */
        final Button buttonJumpEnd = (Button) findViewById(R.id.jump_end);
        buttonJumpEnd.setOnClickListener(new Button.OnClickListener() {
                public void onClick(View v) {
                    getListView().setSelection(KEYRANGEMAX);
                }
            });
    }
    
    private void LoadJEData() 
        throws DatabaseException {
        
        Data theData = new Data();
        try {
            for (int i = 0; i < RECORDNUM; i++) {
                theData.setKey(i);
                theData.setData("Record " + i);
                da.dataByKey.put(theData);
            }
        } catch (DatabaseException dbe) {
            dbe.printStackTrace();
        }
    }
    
    private void ReadJEDataFromCursor() 
        throws DatabaseException {
        
        valueCursor = 
            da.dataByKey.entities(KEYRANGEMIN, true, KEYRANGEMAX, true);
        CursorConfig cursorCon = new CursorConfig();
        cursorCon.setReadUncommitted(true);
        keyCursor = da.dataByKey.keys
            (null, KEYRANGEMIN, true, KEYRANGEMAX, true, cursorCon);
    }
}

А где ссылка на библиотеку для встраивания Berkeley DB?
Исправил.
Ссылка для скачивания. Нужна версия
Berkeley DB Java. Внутри архива найдёте библиотеку для Android
А под iOS кто-то осилил собрать?
Что-то у меня не получилось с первого раза…

P.S. RTFM не помог
Интересен такой вопрос — как вы делали пагинацию в случае с наличием связи 1-N или N-N. Грубо говоря, есть у меня список учеников, список классов, связанные между собой, очевидно, идентификаторами. Можно ли каким-то образом получить выборку учеников, отсортированную по любому из SecondaryIndex-ов по id класса?
Нет, такой задачи передо мной не стояло. Я использую Berkley для простых, не связанных данных.
К тому же это очень древняя версия библиотеки. Более новую с открытой лицензией я не смог найти.
Sign up to leave a comment.

Articles