Как реализовать под Андроидом?

  • Автор темы Автор темы _MBK_
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 765
Реакции
11 041
Я в сабжевом программировании полный нуб, поэтому прошу помощи местных джава-гуру.
Задача банальная - непрерывный запрос на сервер -> JSON в ответ, который распихивается по ListView через адаптер. Уроков с примерами в интернете море, но быстро не могу нагуглить:
Как сделать непрерывное обновление ListView свежими данными? Теоретически, я так думаю, наверное, создать отдельное активити, которое в цикле долбилось бы к серверу и в случае изменения данных, обновляло бы ListView на другом активити? Киньте в меня, пожалуйста, тутором как можно такое взаимодействие реализовать без зависания приложения и с вменяемой прорисовкой, чтоб еще и тыкать по пунктам можно было при этом.
 
  • Спасибо
Реакции: _MBK_
Принцип хороший, на самом деле, на втором этапе на сервере планируется подключить PUSH уведомления, но пока что API позволяет только такие запросы.
 
То есть, организуется фоновый процесс, обращающийся к серверу? А я не понял из статьи, как этот процесс говорит рисующему активити, что надо перерисовать экран? И в какой момент?
 
Там последние два блока кода, с ними проще поиграться. В теме не разбираюсь, так что толком ничего не подскажу, гуглить android asynctask
 
А не подскажешь, заодно, эмулятор андроида под WinXP 32 битный? А то второй день уже бьюсь - не становится ничего 'otbline'
 
Ну под XP скорее всего ничего не осталось вменяемого, если вообще было. У меня под w7x64 официальный эмулятор на ноуте с 16 оперативы не сильно шустро работал.
Средства разработки настолько ушли вперед что минимально требуют w8.1 и версия для одного языка им не подходит.
 
Да то то и оно, что, вроде, раньше было, просто все последние версии или 64 бита хотят или каких то аппаратных ускорителей. Хотя, по сути, чему там тормозить - обычная кроссплатформенная джава-машина, которой пофиг на железо. *(
 
Ну как чему тормозить в виртуальной машине (заточенной под другую архитектуру проца, если конечно не брать x86) работает ява (это сама по себе виртуальная машина), плюс еще несколько слоев абстракций.
XP для работы уже устарела, W7 уже на грани и в некоторых моментах уже за гранью.
Под XP эмуляторы есть на торрентах, даже официальный SDK года так 2010 поддерживает XP (судя по описанию).
 
Да я уже выкрутился, поставил SDK более старой версии - он и работает пошустрее под XP.
 
Извиняюсь, что снова спрашиваю на неправильном форуме, но здесь как-то привычнее, все свои и вроде специалисты есть. ;)
Замаялся искать ошибку уже, суть задачи: Хочу сделать ListView в котором будут строки двух типов с разными Layoutами. Создаю кастомный адаптер, в котором перегружаю строки в зависимости от установки старшего бита в integer элементе ArrayList objects:
Код:
 public Object getItem(int position) {
        int tp=objects.get(position).intValue();         
        if ((tp & 0x8000)==0)         
         return AllData.insts.get(tp);
        else
         return AllData.alarms.get(tp & 0x7FFF);           
      }

public View getView(int position, View convertView, ViewGroup parent) {

        View view = convertView;
        int pos=position;
        int tp=objects.get(pos).intValue() & 0x8000;
        if (tp!=0)
        {

             if (view == null) {
              view = LayoutInflater.from(ctx).inflate(R.layout.alertlist, null);
             }
             Alarm p = (Alarm)getItem(pos);            
            ((TextView) view.findViewById(R.id.laObject)).setText(p.aObject);
             ...
        } else
        {
             if (view == null) {
                 view = LayoutInflater.from(ctx).inflate(R.layout.listinst, null);
               }
              Instance p = getInstance(pos);
              
              ((TextView) view.findViewById(R.id.liStatus)).setText(p.St2);
               ...
        }
        return view;
      }
Когда текстовые поля view пустые или одного типа - все нормально работает и отображается в правильном виде, однако, стоит начать заполнять их значениями из объекта p - в какой то произвольный момент вылетает ошибка на findViewById. Такое ощущение, что для строки в которой нужен один Layout подсовывается view, созданный с другим Layoutом. Что я делаю не так, в инете полно аналогичных примеров, должно ж работать?
 
старшего бита в integer
Меня что-то смущают такие формулировки... Этот тип знаковый? он имеет разрядность 16 бит или все же 32/64/зависит от платформы.
int tp=objects.get(pos).intValue() & 0x8000;
Вот эта магия мне непонятна.
Я бы не выёживался, а писал код максимально упрощенно, граблей в незнакомых платформах и так хватает.
 
он имеет разрядность 16 бит или все же 32/64/зависит от платформы.
Да дело совсем не в типе. Тип int, я просто задал в качестве признака шестнадцатый бит по маске 0x8000 В принципе можно было любой другой взять, хоть восьмой. Данные в списке хранятся правильно, я проверял и признак она тоже определяет как надо. Повторяю, если не модифицировать текстовые поля во view то она отображает все строки как надо, с нужными Layoutами. Путем долгих проб возникло предположение, что она неправильный view подсовывает на вход getView на строках, не влезающих на экран - такое может быть?
 
Ну я так понимаю, objects.get(position) возвращает элемент массива objects типа Object
Но на самом деле это int, если не преобразовывать через метод intValue, компилятор ругается.
Нет, дело не в этом
 
Я понимаю, что соображение чисто риторическое, но, если кому все-таки интересно, то ошибка и вправду была до ужаса идиотская.
Действительно адаптер создает view только первый раз, а потом (видимо для оптимизации) подсовывает для заполнения готовый, не заботясь о том, каким лэйаутом он сделан. Как только убрал проверку if (view==null)... все заработало. Странно, что во всех примерах, которые я видел, данная проверка стоит. Что поделать, как я уже успел убедиться, любой школьник написавший свое первое Hello world тут же выкладывает его в качестве урока в интернет... 'otbline'
 
Статус
Закрыто для дальнейших ответов.