Урок 52. SimpleCursorAdapter, пример использования

Обсуждение уроков
Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 15 май 2013, 18:50

в общем смысле ему нужно сделать notifydatasetchanged.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

rhythmbox91
Сообщения: 6
Зарегистрирован: 15 май 2013, 17:22

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rhythmbox91 » 15 май 2013, 20:08

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

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

public class MyActivity extends Activity {
    DataBaseAdapt db;
    Cursor cursor;
    SimpleCursorAdapter sAdapter;
    ListView viewl;
    EditText message_text;
    SendMessage mt;


    //int widgetID = R.id.HeadText;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        message_text = (EditText) findViewById(R.id.MessField);

        db = new DataBaseAdapt(this);
        db.open();

        cursor = db.getAllInfo();
        startManagingCursor(cursor);

        String [] from = new String[] {DataBaseAdapt.column_sinfo};
        int [] to = new int[] {R.id.itemText};

        sAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);
        viewl = (ListView)findViewById(R.id.listView);
        viewl.setAdapter(sAdapter);

        db.close();
    }
    public void SendMessage(View v){
        String newmessage = message_text.getText().toString().trim();
        if(newmessage.length() > 0){
            message_text.setText("");
            AddNewMessage(newmessage);
            mt = new SendMessage();
            mt.execute();
        }
    }

    class SendMessage extends AsyncTask<Void, Void, ListView> {

        @Override
        protected ListView doInBackground(Void... params) {
            try {
                sAdapter.notifyDataSetChanged();
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return viewl;

        }

        @Override
        protected void onPostExecute(ListView result) {
            super.onPostExecute(result);
        }

    }

    public void AddNewMessage(String message){
        db = new DataBaseAdapt(this);
        db.open();
        db.addRec(message);
        db.close();
    }
}

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 15 май 2013, 20:19

а лог ошибок? строка на которой ошибка..?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 15 май 2013, 20:21

Foenix писал(а):в общем смысле ему нужно сделать notifydatasetchanged.
у курсор адаптеров нету такого как у обычных адаптеров что бы сказали ему обновись и он обновился, курсор это привязка к адаптеру и обновлять нужно именно его
R.id.team
Политика на форуме запрещена

rhythmbox91
Сообщения: 6
Зарегистрирован: 15 май 2013, 17:22

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rhythmbox91 » 15 май 2013, 20:33

Лог ошибок тогда скидывать нет смысла. Резак, можно по конкретней, пожалуйста, как это делается?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 15 май 2013, 20:40

rezak90 писал(а):
Foenix писал(а):в общем смысле ему нужно сделать notifydatasetchanged.
у курсор адаптеров нету такого как у обычных адаптеров что бы сказали ему обновись и он обновился, курсор это привязка к адаптеру и обновлять нужно именно его
ну я думала, что исходные данные им уже меняются, а на экране ничего не происходит
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 15 май 2013, 20:41

в логе смысл есть всегда.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 15 май 2013, 21:22

Отправляется смс, сохраняется в БД, и я хочу сделать с помощью AsyncTask чтобы список сразу обновлялся. AsyncTask написал, но вот как сделать чтобы обновлялся simpleCursorAdapter не знаю.
Вытаскиваете курсор заново из бд и у адаптера есть метод changeCursorAndColumns, в который заново передаются новые параметры
R.id.team
Политика на форуме запрещена

rhythmbox91
Сообщения: 6
Зарегистрирован: 15 май 2013, 17:22

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rhythmbox91 » 16 май 2013, 10:51

Ура ура ура, я это сделал, спасибо вам большое :)

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

@Override
        protected void onPostExecute(ListView result) {
            super.onPostExecute(result);
            db.open();
            Log.d(LOG_TAG, "DB OPEN");
            cursor = db.getAllInfo();
            startManagingCursor(cursor);
            Log.d(LOG_TAG, "CURSOR MOVE TO LAST");
            String [] from = new String[] {DataBaseAdapt.column_sinfo};
            int [] to = new int[] {R.id.itemText};
            sAdapter.changeCursorAndColumns(cursor, from, to);
            Log.d(LOG_TAG, "ADAPTER START");
        }
Единственное у меня вопрос, строчку с startManagingCursor(cursor) я заменил на cursor.movetosat(), и все равно работает. Я же правильно понимаю что первый вариант ставит курсор в стартовое положение и говорит "вот с этого мы начнем пробегаться по списку", а второй вариант уводит курсор в конец списка? И получается что первый вариант ест больше ресурсов? Или я не прав?

rhythmbox91
Сообщения: 6
Зарегистрирован: 15 май 2013, 17:22

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rhythmbox91 » 17 май 2013, 11:53

Доброго времени суток. На предыдущее сообщение мне не ответили, любопытство мое не удовлетворили :(
У меня новый вопрос по теме, делаю свой биндер к курсор адаптеру. Смысл в нем тот, чтобы если сообщение написано от меня, то слева выводить текст сообщения, справа мое имя. Причем веса должны меняться, чтобы текст сообщения занимал большее пространство. И наоборот, если написано от девушки например, то справа текст сообщения, слева ее имя. Так оно и выполняется, косяк в том, что даже если в биндере не выполняется условие на проверку, то веса все равно меняются. Почему????
Вот код биндера, скажите пожалуйста, что я не так делаю?

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

@Override
    public boolean setViewValue(View view, Cursor cursor, int i) {
        switch (view.getId()){
            case R.id.itenTextAddress:
                    if (cursor.getString(i).equals("You")){
                        TextView addtext = (TextView) view;
                        addtext.setText(cursor.getString(1));
                        pass = cursor.getString(1);
                        addtext.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0.9f));
                        return true;
                    }


            case R.id.itemTextMessage:
                    if (cursor.getString(i).equals(pass)){
                        TextView mestext = (TextView) view;
                        mestext.setText(cursor.getString(2));
                        mestext.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f));
                        return true;
                    }

        }


        return false;
    }

Artemko
Сообщения: 26
Зарегистрирован: 16 июл 2012, 15:09

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Artemko » 12 июн 2013, 17:47

при добавлении картинок в проект, их id меняются и в списке появляются совсем другие картинки, что с этим делать?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 12 июн 2013, 20:32

у картинок вообще говоря нет id, уточни, что именно там происходит.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Artemko
Сообщения: 26
Зарегистрирован: 16 июл 2012, 15:09

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Artemko » 17 июн 2013, 20:56

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

final String[] from = { NamesColumns.AGE, NamesColumns.IMG, NamesColumns.DATE};
final int[] to = new int[] { R.id.ticket, R.id.image, R.id.date_text};
В третей колонке хранятся даты в Unix формате (LONG). Как мне это длинное число переформатировать в нормальный формат даты и присвоить это R.id.date_text

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 17 июн 2013, 20:58

Artemko писал(а):

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

final String[] from = { NamesColumns.AGE, NamesColumns.IMG, NamesColumns.DATE};
final int[] to = new int[] { R.id.ticket, R.id.image, R.id.date_text};
В третей колонке хранятся даты в Unix формате (LONG). Как мне это длинное число переформатировать в нормальный формат даты и присвоить это R.id.date_text
нужно писать кастомный адаптер и в getView уже форматировать
R.id.team
Политика на форуме запрещена

Artemko
Сообщения: 26
Зарегистрирован: 16 июл 2012, 15:09

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Artemko » 17 июн 2013, 21:39

а других способов получения даты нет?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 17 июн 2013, 22:09

Artemko писал(а):а других способов получения даты нет?
нет, ведь в TextView будет писаться инфа та которая с базы вытягивается, а она там в long
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 17 июн 2013, 22:26

можно по-разному, например, попытаться форматнуть прямо в запросе из базы, а можно хранить еще одну колонку в таблице с отформатированной датой - смотря какая задача и как выгодно.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 17 июн 2013, 22:33

Foenix писал(а):можно по-разному, например, попытаться форматнуть прямо в запросе из базы, а можно хранить еще одну колонку в таблице с отформатированной датой - смотря какая задача и как выгодно.
а можно в запросе, ведь у SQLite есть хорошие функции для работы с датами
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 17 июн 2013, 23:10

Я вообще с серверных бд все пытаюсь сделать запросом.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Artemko
Сообщения: 26
Зарегистрирован: 16 июл 2012, 15:09

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Artemko » 18 июн 2013, 09:45

rezak90 писал(а):
Artemko писал(а):а других способов получения даты нет?
нет, ведь в TextView будет писаться инфа та которая с базы вытягивается, а она там в long
нет, я имею ввиду другой способ записи даты в БД. Не через Long, а как то еще, чтоб потом нормально считать можно было

Ответить