[JAVA] seekbar null bij starten app

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 02-10 14:23

Shapeshifter

Get it over with

Topicstarter
Ik heb een app met tabs waarin ik een seekbar probeer te plaatsen in het fragment waar de app in start. Ik deed dit in een tweede tab ook al (regel 58 - 73) en dat werkte prima, dus ik dacht gewoon de code daarvan te kopiëren naar de eerste tab, maar nu gooit deze allemaal null pointer exceptions (bij de block comment, regel 39 - 54). Het lijkt erop dat de findviewbyid() de seekbar niet gevonden krijgt, maar ik begrijp niet waarom... setContentView is gecalled voordat ik brightnessSeekbar probeer toe te wijzen, ik zie hem even niet.

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
public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {
    ViewPager mViewPager;
    SeekBar volumeSeekbar;
    SeekBar brightnessSeekbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);
        
        SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });
        
        actionBar.addTab(actionBar.newTab().setText("Media").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Home").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Lights").setTabListener(this));
    }
    
    @Override
    @SuppressWarnings("unchecked")
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
        
        if(tab.getPosition() == 0){
            volumeSeekbar = (SeekBar) findViewById(R.id.volume_seekbar);

            /*
            volumeSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    // stuff
                }

                @Override
                public void onStartTrackingTouch(SeekBar arg0) {}

                @Override
                public void onStopTrackingTouch(SeekBar arg0) {
                    // stuff
                }
            });
            */
        } else if(tab.getPosition() == 1){
            // stuff
        } else if(tab.getPosition() == 2){
            brightnessSeekbar = (SeekBar) findViewById(R.id.brightness_seekbar);
            
            brightnessSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    // stuff
                }

                @Override
                public void onStartTrackingTouch(SeekBar arg0) {}

                @Override
                public void onStopTrackingTouch(SeekBar arg0) {
                    // stuff
                }
            });
        }
    }
    
    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {}
    
    @Override
    @SuppressWarnings("unchecked")
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        // stuff
    }

    public class SectionsPagerAdapter extends FragmentPagerAdapter {
        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return new MediaFragment();
            case 1:
                return new HomeFragment();
            case 2:
                return new LightsFragment();
            }
            
            return null;
        }

        @Override
        public int getCount() {
            return 3;
        }
    }

    public class MediaFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragment_media, container, false);
        }
    }
    
    public class HomeFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragment_home, container, false);
        }
    }
    
    public class LightsFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragment_lights, container, false);
        }
    }
}

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m


Acties:
  • 0 Henk 'm!

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Ik denk dat we je meer kunnen helpen als je ook de complete stacktrace er even bij zet.
Heb je de id van die seekbar wel goed geconfigureerd (open deur wellicht, maar vraag het toch maar even). Niet toevallig de seekbar hernoemt en heeft je IDE die verandering niet meegenomen in je R-class? Oftewel, controleer de id-waarde even van de seekbar.

Signature van nature


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het zou inderdaad handig zijn om aan te geven waar je een NPE krijgt. Als het inderdaad is dat je findViewById null returned ( En dus op de volgende regel een NPE krijgt ) dan zal er ergens een Id niet goed staan. Probeer dan gewoon eens een nieuwe view toe te voegen met een nieuw Id en die op te vragen.

[ Voor 8% gewijzigd door Woy op 17-08-2015 10:02 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 02-10 14:23

Shapeshifter

Get it over with

Topicstarter
Derp, vergeten, het was al laat :P

code:
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
08-17 11:05:48.888  24009-24009/? I/art﹕ Late-enabling -Xcheck:jni
08-17 11:05:48.989  24009-24009/? D/AndroidRuntime﹕ Shutting down VM
08-17 11:05:48.990  24009-24009/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.workspace.omnia, PID: 24009
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.workspace.omnia/com.workspace.omnia.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SeekBar.setOnSeekBarChangeListener(android.widget.SeekBar$OnSeekBarChangeListener)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SeekBar.setOnSeekBarChangeListener(android.widget.SeekBar$OnSeekBarChangeListener)' on a null object reference
            at com.workspace.omnia.MainActivity.onTabSelected(MainActivity.java:63)
            at android.support.v7.app.ActionBarImplICS$TabWrapper.onTabSelected(ActionBarImplICS.java:558)
            at com.android.internal.app.WindowDecorActionBar.selectTab(WindowDecorActionBar.java:624)
            at com.android.internal.app.WindowDecorActionBar.addTab(WindowDecorActionBar.java:553)
            at com.android.internal.app.WindowDecorActionBar.addTab(WindowDecorActionBar.java:539)
            at android.support.v7.app.ActionBarImplICS.addTab(ActionBarImplICS.java:247)
            at android.support.v7.app.ActionBarImplJB.addTab(ActionBarImplJB.java:20)
            at com.workspace.omnia.MainActivity.onCreate(MainActivity.java:47)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)


Heb de id van de seekbar nog even gechecked en die is goed. Sterker nog, als ik een verkeerde invul kan ik niet compileren (Android Studio).

Wat ik zelf dus vreemd vind is dat de seekbar op de derde tab die precies hetzelfde gecode is het wel gewoon doet, maar daar moet je eerst heensliden. Ik heb zo'n vermoeden dat de seekbar nog niet bestaat omdat de app net geöpend wordt. Heb voor de grap een while(seekbar == null) geprobeerd, maar die blijft eindeloos hangen.

[ Voor 4% gewijzigd door Shapeshifter op 17-08-2015 11:13 ]

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m


Acties:
  • 0 Henk 'm!

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Om daar zeker van te zijn, kun je beter nu eerst er voor zorgen dat niet direct de eerste tab geselecteerd wordt om zo je Android app de kans te geven zich volledig te initialiseren. Ik ben geen android ontwikkelaar en weet dus ook niet wat de application life cycle is van een app.

Signature van nature


Acties:
  • 0 Henk 'm!

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 02-10 14:23

Shapeshifter

Get it over with

Topicstarter
Ik heb het opgelost door de code uit de onTabSelected functie te halen en in de fragment te schuiven. Mijn vermoeden is dat hij binnen die klasse nog weet in welke view hij moet zoeken om het id van de seekbar te vinden, terwijl hij in de ontabselected die niet kan vinden. Ter verduidelijking:

Java:
1
2
3
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
    }


en de fragment class

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
public class MediaFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View mView = inflater.inflate(R.layout.fragment_media, container, false);
            volume_text = (TextView) mView.findViewById(R.id.volume_text);
            volumeSeekbar = (SeekBar) mView.findViewById(R.id.volume_seekbar);

            volumeSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    //stuff
                }

                @Override
                public void onStartTrackingTouch(SeekBar arg0) {}

                @Override
                public void onStopTrackingTouch(SeekBar arg0) {
                    //stuff
                }
            });

            return mView;
        }
    }

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m

Pagina: 1