Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Программирование Android Анализ приложения. Обращения к серверу https://www.cyberforum.ru/ android-dev/ thread2407807.html
Не могу полностью проанализировать приложение. Использовал Kali Linux + Burp, WireShark. С WireShark ничего толкового не получилось вытянуть, он сложный. Приложения использует http/s запросы и еще что-то. Сделав обратный реверс-инжиниринг приложения и просмотрев все файлы и код приложения узнал, впрочем как и подозревал, приложение использует ws:// и wss://. А еще было слово: polling. Что...
Программирование Android Свой Fake GPS
Почему не получается заставить обмануть андроид как в Fake GPS ??? protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { ...
Программирование Android Вывод данных из бд с использованием метода post https://www.cyberforum.ru/ android-dev/ thread2407749.html
Пытаюсь освоить обращение к удалённому серверу. Выбор пал на Apach+Json, с httppost. Нашёл в сети интересующий меня код. Начал менять под себя. Поскольку в принципе почти то что мне нужно было. Решил изменить код чтобы запрос выводился по нужным критериям с использованием post. Вот сам код и то что я пытался изменить. php файл <?php $con = mysqli_connect("localhost", "*******",...
Программирование Android Не могу отловить первое нажатие клавиши BACK https://www.cyberforum.ru/ android-dev/ thread2407701.html
Всем привет,подскажите пожалуйста добрые люди.Не могу отловить первое нажатие аппаратной клавиши Back. Код отрабатывает,но на второе нажатие. Дополнительно как только на эдит текс попадает фокус выполняется d.setText(""); Поэтому должно вроде работать,но не работает @Override public void onBackPressed() { if (d.getText().toString().isEmpty() == true) { ...
Программирование Android Симулятор студента
Всем привет) я хочу создать игру на подобие "Симулятор студента" на андроид. Так как я начинающий в этой области Мне пригодятся любые ваши советы. Поиграл минут 20 мне очень понравилось что я захотел иметь свою такую игру но, я бы изменил дизайн и иконку игры😀. Спасибо за ранее :)
Программирование Android Проверка на ошибку загрузки страницы Добрый день. Начинаю потихоньку изучать азы Android. Решил на примерах в интернете создать простенькое приложение - сайт. Все вроде бы хорошо, загружает, по страницам переходит, но есть одно но. Каким образом проверить дошел ли ответ от сервера? Допустим у пользователя выключен интернет, не работает сайт или еще какие то ошибки на стороне сервера, 404, 500 и т.д. Как проверить и выдать к примеру... https://www.cyberforum.ru/ android-dev/ thread2407336.html
Программирование Android Не работает dblclick в мобильном приложении, чем заменить? Есть сайте, который использует dbclick в некоторых местах. При запуске на SAMSUNG всё работает, кроме dbclick. Чем заменить? https://www.cyberforum.ru/ android-dev/ thread2407276.html Панель авторизации в Google Программирование Android
Моему приложению необходимо получить доступ к API Google Диска. OAuth-токен у меня уже есть, я на стадии сопряжения с аккаунтом пользователя. Я заметил, что везде используется авторизация в гугловской панели авторизации, простите за тавтологию. Я наблюдал её и в приложении GeForce Experience (вложение 1), и в виндовом Календаре (вложение 2), и в ES Проводнике (вложение 3). Проведя немало времени...
Программирование Android Сохранить значение float https://www.cyberforum.ru/ android-dev/ thread2407115.html
Вопрос из детского сада. В результате неких вычислений каждые 10 секунд получаю float result Каждые следующие 10 сек. результат вычислений разный... private void Arifmetika (){ float result; Нужно эти результаты складывать и записывать например в float itog
Программирование Android Не могу разобрать в ошибках https://www.cyberforum.ru/ android-dev/ thread2407099.html
Парни привет, по своей не опытности не могу понять что означают ошибки и куда смотреть, прошу подсказать. Программа работает не на всех телефонах, при тестирование приложения на том телефоне котором не работает, выдает такие ошибки: 02-18 20:57:32.206 16378-16378/? I/art: Late-enabling -Xcheck:jni 02-18 20:57:32.233 16378-16388/? I/art: Debugger is no longer active 02-18 20:57:32.264...
Программирование Android Поиск GPS mock приложений
Посодействуйте. Есть приложение которое отслеживает mock приложения. Первое приложение я вскрыл, разложив на байт код далвик и повырезал всю защиту. Теперь mock приложения могут функционировать какнужнои все норм. Суть вопроса: в первом приложении оказалось есть функция сканирования этих приложений. У меня не получается её найти. Повырезал все функции getinstallpackeg, PERMISSION.MOCK_LOCATION,...
Программирование Android Подключение mysql к андроид приложению Доброго времени суток, делаю приложение с расписанием занятий. Идея такая: Пользователь заходит по
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 20
0

Подгрузка из Firebase Firestore в recycle view - Программирование Android - Ответ 13347485

22.02.2019, 01:54. Показов 1331. Ответов 1
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Загружаю данные из Firebase Firestore в recycle view и пытаюсь сделать постепенную подгрузку данных при достижении конца списка.

Вроде бы получилось, но работает не совсем корректно:

1) при переходе на другой фрагмент и возвращении обратно на этот, отображаются не все записи и подгрузка не работает

2) при попытке обновить список с помощью swipeRefreshLayout он обновляется, но показываются только последние 4 записи, подгрузка также перестает работать

3) переодически при прокрутке (например, когда записей меньше чем сам лимит) может вылетать с ошибкой в 145 строке
Java
1
lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
пишет length=0; index=-1

Как решить эти проблемы? Помогите, пожалуйста

HomeFragment.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
public class HomeFragment extends Fragment {
 
    private final int LIMIT_ITEM_LOAD = 4;
 
    private View item_1, item_2, item_3, item_4, item_5;
    private SwipeRefreshLayout swipeRefresh;
 
    private RecyclerView recyclerView;
    private LinearLayoutManager linearLayoutManager;
    private DocumentSnapshot lastVisible;
    private boolean isScrolling;
    private boolean isLastItemReached;
    private List<Meeting> list;
    private MeetingAdapter adapter;
 
 
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
 
        item_1 = getActivity().findViewById(R.id.item_1);
        item_2 = getActivity().findViewById(R.id.item_2);
        item_3 = getActivity().findViewById(R.id.item_3);
        item_4 = getActivity().findViewById(R.id.item_4);
        item_5 = getActivity().findViewById(R.id.item_5);
 
        BottomNavigationView navigation = getActivity().findViewById(R.id.navigation);
        navigation.getMenu().getItem(0).setChecked(true);
        setBorderItemSelected(item_1);
 
        Toolbar toolbar = view.findViewById(R.id.toolbar);
        ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
        ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);
        toolbar.setTitle("Лента событий");
        setHasOptionsMenu(true);
 
 
        recyclerView = view.findViewById(R.id.recyclerView);
        linearLayoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(linearLayoutManager);
 
        swipeRefresh = view.findViewById(R.id.swipeRefresh);
        swipeRefresh.setColorSchemeResources(
                R.color.orange_300,
                R.color.pink_300,
                R.color.green_300,
                R.color.blue_300);
        swipeRefresh.setOnRefreshListener(refreshListener);
 
        getLastKeyFromFirebase();
 
        return view;
    }
 
 
 
    private SwipeRefreshLayout.OnRefreshListener refreshListener = new SwipeRefreshLayout.OnRefreshListener() {
 
        @Override
        public void onRefresh() {
            new Handler().postDelayed(new Runnable() {
                @Override public void run() {
                    swipeRefresh.setRefreshing(true);
                    getLastKeyFromFirebase();
                    swipeRefresh.setRefreshing(false);
                }
            },1000);
        }
    };
 
 
 
    private void getLastKeyFromFirebase() {
 
        Query query = FirebaseFirestore.getInstance()
                .collection("meetings")
                .orderBy("id", Query.Direction.DESCENDING)
                .limit(LIMIT_ITEM_LOAD);
 
        query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    list = new ArrayList<>();
 
                    for (DocumentSnapshot document : task.getResult()) {
                        Meeting meeting = document.toObject(Meeting.class);
                        list.add(meeting);
                    }
 
                    adapter = new MeetingAdapter(list, getContext());
                    recyclerView.setAdapter(adapter);
                    lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
                    Toast.makeText(getContext(), "Основа загружена", Toast.LENGTH_SHORT).show();
 
                    recyclerView.addOnScrollListener(onScrollListener);
 
                }
            }
        });
    }
 
 
 
    private RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
 
        @Override
        public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
 
            if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
                isScrolling = true;
            }
        }
 
        @Override
        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
 
            int firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
            int visibleItemCount = linearLayoutManager.getChildCount();
            int totalItemCount = linearLayoutManager.getItemCount();
            Log.d("Ok","firstVisibleItem = " + firstVisibleItem);
            Log.d("Ok","visibleItemCount = " + visibleItemCount);
            Log.d("Ok","totalItemCount = " + totalItemCount);
 
            if (isScrolling && (firstVisibleItem + visibleItemCount == totalItemCount) && !isLastItemReached) {
                isScrolling = false;
 
                Query nextQuery = FirebaseFirestore.getInstance()
                        .collection("meetings")
                        .orderBy("id", Query.Direction.DESCENDING)
                        .startAfter(lastVisible)
                        .limit(LIMIT_ITEM_LOAD);
                nextQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        for (DocumentSnapshot document : task.getResult()) {
                            Meeting meeting = document.toObject(Meeting.class);
                            list.add(meeting);
                        }
                        adapter.notifyDataSetChanged();
 
                        lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
                        Toast.makeText(getContext(), "Подгрузка завершена", Toast.LENGTH_SHORT).show();
 
                        if (task.getResult().size() < LIMIT_ITEM_LOAD) {
                            isLastItemReached = true;
                        }
                    }
                });
            }
        }
 
    };
 
 
 
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_filtration:
                //
                break;
            default:
                break;
        }
        return true;
    }
 
 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.toolbar_home, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
 
}

MeetingAdapter.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class MeetingAdapter extends RecyclerView.Adapter<MeetingAdapter.MyViewHolder> {
 
    private List<Meeting> meetingsList;
    private Context context;
 
    public MeetingAdapter(List<Meeting> meetingsList, Context context) {
        this.meetingsList = meetingsList;
        this.context = context;
    }
 
    @NonNull
    @Override
    public MeetingAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(context).inflate(R.layout.item_meeting, parent, false);
        return new MeetingAdapter.MyViewHolder(itemView);
    }
 
    @Override
    public void onBindViewHolder(@NonNull MeetingAdapter.MyViewHolder holder, int position) {
        holder.date.setText(meetingsList.get(position).getDate());
        holder.title.setText(meetingsList.get(position).getTitle());
    }
 
    @Override
    public int getItemCount() {
        return meetingsList.size();
    }
 
    class MyViewHolder extends RecyclerView.ViewHolder {
 
        private TextView date, title;
 
        MyViewHolder(View itemView) {
            super(itemView);
 
            date = itemView.findViewById(R.id.date);
            title = itemView.findViewById(R.id.title);
        }
    }
 
}


Вернуться к обсуждению:
Подгрузка из Firebase Firestore в recycle view Программирование Android
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2019, 01:54
Готовые ответы и решения:

Работа с Firebase cloud firestore
Здраствуйте, помогите разобраться, хочу сделать в android studio, чтобы при нажатии на кнопку...

Как обновить Recycle View после добавления нового элемента в БД? Используется Cursor
Проблема такова, после добавления элемента в БД, список элементов Recycle View не обновляется,...

Excel и Power Query подгрузка картинок и отображение в Power View
Добрый день. Осваиваю Power Query, Power Pivot и Power View в эксель (2016 версия). Пробую...

Загрузка в адаптер из другой коллекции Firestore
В адаптере в методе bind устанавливаю данные из List (во фрагменте загружаю их туда из Firestore)....

1
22.02.2019, 01:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2019, 01:54
Помогаю со студенческими работами здесь

Recycle/CardView NullPointerException
(card_view_address)- &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout...

recycle.bin desktop.ini
принес домой внешний ЖД до этого побывал по моим подозрениям на зараженном компьютере и теперь на...

Как восстановить RECYCLE.BIN
Всем привет. Удалил unlockerом случайно $RECYCLE.BIN. Проводник не отвечает, как исправить?

В чем разница (View view) и (View v)
Я только начинаю изучать программирование под андроид (до этого вобще программированием не...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru