Форум программистов, компьютерный форум CyberForum.ru

NPE при инициализации фрагментов - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Ошибка при accept() http://www.cyberforum.ru/android-dev/thread1757869.html
Доброго времени суток. Возникла очень большая проблема. Делаю сетевой чат на Android. Сделал сервер package com.riverbandon.com.wifichat; import android.app.Activity; import android.support.annotation.NonNull; import android.widget.Toast; import java.net.*; import java.io.*;
Android SQLite. SELECT после UPDATE Есть активити "Список документов" и активити "Документ". При закрытии активити "Документ" вносятся изменения в БД и возвращается активити "Список документов". В активити "Список документов" в onResume() перечитывается БД. Но данные не меняются, несмотря на то, что отладчиком вижу, что последовательность именно такая "Запись - Чтение списка". Чтобы данные обновились, требуется заново вызвать... http://www.cyberforum.ru/android-dev/thread1757777.html
Android Настроить в своей программе платный контент
Добрый день. Я новичок и даже близко не представляю как можно подобное настроить. И систему не понимаю. По этому буду признателен за любую помощь. В целом суть вопроса следующая, есть прога. условно бесплатаная. Но часть функций блокированы. Их можно купить. Либо купить прогу. куакие есть варианты? и как подобное реализуется? Спасибо.
Перенос проекта из Eclipse в Android Studio Android
У меня есть простенький чат на Java, проблема в том, что мне нужно перенести клиентскую часть на Андройд... Пробовал на Eclipse ставить плагин ADT, но там появляются другие проблемы. Решил поставить Android Studio. Вот код: package pak_chat; import java.net.*; import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; //Создаём стандартное окно. Организуем...
Android Parcel Unmarshalling unknown type code 7667826 at offset 248 http://www.cyberforum.ru/android-dev/thread1757708.html
При передаче одного значения ArrayList из Activity в Activity все проходит хорошо, но при <2 выскакивает ошибка Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@52800e38: Unmarshalling unknown type code 7667826 at offset 244 и указывает на строчку в FirstActivity: ArrayList<Model> list = extraList.getParcelableArrayList("arrayList"); Нашел в Сети такое решение:
Android Запуск чужого проекта в Android Studio Есть пример работы API https://github.com/condesales/easyFoursquare4Android/tree/master/easyFoursquare4AndroidExample, встал вопрос как его запустить у себя, так как при открытии его в студии запустить его нельзя, хотя ошибок нигде нет. Куда смотреть и что делать? подробнее

Показать сообщение отдельно
Illidan_SF
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 15

NPE при инициализации фрагментов - Android

08.06.2016, 14:48. Просмотров 105. Ответов 0
Метки (Все метки)

Пишу приложение, в котором использую фрагменты на главного экране. Общая идея такова: на сервере 4 таблицы, данные из каждой таблицы приходят с сервера и отображаются на одном из фрагментов. Проблема в том, что когда работает код для 1 табы, то все нормально, когда пытаюсь сделать работу 2 и больше табов, появляются ошибки. Код привожу для для 1 табы, остальные 3 написаны также. Для инициализации фрагментов использую наследник класса FragmentPagerAdapter, данные принимаются в виде ArrayList.
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
public class TabsFragmentAdapter extends FragmentPagerAdapter {
 
private Map<Integer, AbstractTabFragment> tabs;
private Context context;
private List<TournamentsDTO> data_tour;
private List<TeamsDTO> data_team;
private List<PlayersDTO> data_play;
private List<CommentatorsDTO> data_comm;
private  TournamentsFragment tournamentsFragment;
private TeamsFragment teamsFragment;
private PlayersFragment playersFragment;
private CommentatorsFragment commentatorsFragment;
 
public TabsFragmentAdapter(Context context, FragmentManager fm) {
    super(fm);
    this.context = context;
    this.data_tour = new ArrayList<>();
    this.data_team = new ArrayList<>();
    this.data_play = new ArrayList<>();
    this.data_comm = new ArrayList<>();
    initTabs(context);
}
@Override
public CharSequence getPageTitle(int position) {
    return tabs.get(position).getTitle();
}
@Override
public Fragment getItem(int position) {
    return tabs.get(position);
}
@Override
public int getCount() {
    return tabs.size();
}
private void initTabs(Context context) {
    tabs = new HashMap<>();
    tournamentsFragment = TournamentsFragment.getInstance(context, data_tour);
    teamsFragment = TeamsFragment.getInstance(context, data_team);
    playersFragment = PlayersFragment.getInstance(context, data_play);
    commentatorsFragment = CommentatorsFragment.getInstance(context, data_comm);
    tabs.put(0, tournamentsFragment);
    tabs.put(1, teamsFragment);
    tabs.put(2, playersFragment);
    tabs.put(3, commentatorsFragment);
}
public void setData_tour(List<TournamentsDTO> data_tour) {
    this.data_tour = data_tour;
    tournamentsFragment.refreshData(data_tour);
}
public void setData_team(List<TeamsDTO> data_team) {
    this.data_team = data_team;
    teamsFragment.refreshData(data_team);
}
public void setData_play(List<PlayersDTO> data_play) {
    this.data_play = data_play;
    playersFragment.refreshData(data_play);
}
public void setData_comm(List<CommentatorsDTO> data_comm) {
    this.data_comm = data_comm;
    commentatorsFragment.refreshData(data_comm);
}
Вот так выглядит инициализация каждого фрагмента
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
public class TournamentsFragment extends AbstractTabFragment {
private static final int LAYOUT = R.layout.fragment_tournaments;
private List<TournamentsDTO> data_tour;
private TournamentsListAdapter tournamentsListAdapter;
public static TournamentsFragment getInstance(Context context, List<TournamentsDTO> data_tour)
{
    Bundle  args = new Bundle();
    TournamentsFragment tournamentsFragment = new TournamentsFragment();
    tournamentsFragment.setArguments(args);
    tournamentsFragment.setContext(context);
    tournamentsFragment.setData_tour(data_tour);   tournamentsFragment.setTitle(context.getString(R.string.fab_item_tournaments));
    return tournamentsFragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(LAYOUT, container, false);
    RecyclerView rv = (RecyclerView) view.findViewById(R.id.recyclerViewTour);
    rv.setLayoutManager(new LinearLayoutManager(context));
    tournamentsListAdapter = new TournamentsListAdapter(data_tour);
    rv.setAdapter(tournamentsListAdapter);
    return view;
}
private void setContext(Context context) {
    this.context = context;
}
private void setData_tour(List<TournamentsDTO> data_tour) {
    this.data_tour = data_tour;
}
public void refreshData(List<TournamentsDTO> list){
    tournamentsListAdapter.setData_tour(list);
    tournamentsListAdapter.notifyDataSetChanged();
}
А вот так они заполняются в MainActivity. Здесь привожу глобальные переменные, метод, который инициализирует табы и метод, который загружает данные из сервера. Данные приходят в виде массива, поэтому перевожу их в список.
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
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private TabsFragmentAdapter adapter1, adapter2, adapter3, adapter4;
 
private void initTabs() {
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    adapter1 = new TabsFragmentAdapter(this, getSupportFragmentManager());
    viewPager.setAdapter(adapter1);
 
    new TournamentTask().execute();
 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    tabLayout.setupWithViewPager(viewPager);
}
 
private class TournamentTask extends AsyncTask<Void, Void, TournamentsDTO[]>{
    @Override
    protected TournamentsDTO[] doInBackground(Void... params) {
        RestTemplate template1 = new RestTemplate();
        template1.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        return template1.getForObject(Constants.URL.GET_ALL_TOURNAMENTS_ITEM, TournamentsDTO[].class);
    }
 
    @Override
    protected void onPostExecute(TournamentsDTO[] tournamentsDTOs) {
        List<TournamentsDTO> listTour = new ArrayList<>();
        int count = 0;
 
        while (count < tournamentsDTOs.length){
            listTour.add(tournamentsDTOs[count]);
            count++;
        }
        adapter1.setData_tour(listTour);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
java.lang.NullPointerException
at illidan.com.statisticsd2.fragments.TournamentsFragment.refreshData(TournamentsFragment.java:68)
at illidan.com.statisticsd2.adapter.TabsFragmentAdapter.setData_tour(TabsFragmentAdapter.java:79)
at illidan.com.statisticsd2.MainActivity$TournamentTask.onPostExecute(MainActivity.java:169)
at illidan.com.statisticsd2.MainActivity$TournamentTask.onPostExecute(MainActivity.java:151)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Изменил немного реализацию refreshData()
Java
1
2
3
4
5
6
7
8
public void refreshData(List<TournamentsDTO> list){
    if(tournamentsListAdapter==null){
        data_tour = list; 
    } else {
        tournamentsListAdapter.setData_tour(list);
        tournamentsListAdapter.notifyDataSetChanged();
    }
}
NPE пропали, но данные по прежнему отображаются только на одной табе, вне зависимости от того, какая сейчас показывается.

Есть подозрение, что проблема может быть в getInstance(), но я не знаю что делать...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru