Hi I'm working on an app that records phone calls. but now I'm working on the presentation slides of the app and I would like that if the (terms) checkbox is not selected, the btnNext button is disabled and if the button is selected it is enabled. I managed all of this with two conditions (lines 81). the app keeps crashing. some help would be really handy.
I leave you the code and the logcat of crush
crush's logcat
boolean android.widget.CheckBox.isChecked()' on a null object reference
my code:
package com.conta.app.spyear;
public class WelcomeActivity extends AppCompatActivity {
private ViewPager viewPager;
private LinearLayout layoutDot;
private TextView[]dotstv;
private int[]layouts;
private Button btnNext;
private MyPagerAdapter pagerAdapter;
private CheckBox terms;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(!isFirstTimeStartApp()) {
startMainActivity();
finish();
}
setStatusBarTransparent();
setContentView(R.layout.activity_welcome);
viewPager = findViewById(R.id.view_pager);
layoutDot = findViewById(R.id.dotLayout);
btnNext = findViewById(R.id.btn_next);
terms = (CheckBox) findViewById(R.id.terms);
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int currentPage = viewPager.getCurrentItem()+1;
if(currentPage < layouts.length) {
//move to next page
viewPager.setCurrentItem(currentPage);
} else {
startMainActivity();
}
}
});
layouts = new int[]{R.layout.slider_1,R.layout.slider_2, R.layout.slider_3, R.layout.slider_4};
pagerAdapter = new MyPagerAdapter(layouts,getApplicationContext());
viewPager.setAdapter(pagerAdapter);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position == layouts.length-1){
//LAST PAGE
btnNext.setText("START");
btnNext.setEnabled(false);
if(terms.isChecked()){
btnNext.setEnabled(true);
}
else{
btnNext.setEnabled(false);
}
}
else {
btnNext.setText("NEXT");
}
setDotStatus(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
setDotStatus(0);
}
private boolean isFirstTimeStartApp() {
SharedPreferences ref = getApplicationContext().getSharedPreferences("IntroSliderApp", Context.MODE_PRIVATE);
return ref.getBoolean("FirstTimeStartFlag", true);
}
private void setFirstTimeStartStatus(boolean stt) {
SharedPreferences ref = getApplicationContext().getSharedPreferences("IntroSliderApp", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = ref.edit();
editor.putBoolean("FirstTimeStartFlag", stt);
editor.commit();
}
private void setDotStatus(int page){
layoutDot.removeAllViews();
dotstv =new TextView[layouts.length];
for (int i = 0; i < dotstv.length; i++) {
dotstv[i] = new TextView(this);
dotstv[i].setText(Html.fromHtml("•"));
dotstv[i].setTextSize(30);
dotstv[i].setTextColor(Color.parseColor("#a9b4bb"));
layoutDot.addView(dotstv[i]);
}
//Set current dot active
if(dotstv.length>0){
dotstv[page].setTextColor(Color.parseColor("#ffffff"));
}
}
private void startMainActivity(){
setFirstTimeStartStatus(false);
startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
finish();
}
private void setStatusBarTransparent(){
if (Build.VERSION.SDK_INT >= 21){
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
}
complete logcat error
38:37.470 16542-16542/com.example.ngoctri.introsliderexam E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ngoctri.introsliderexam, PID: 16542
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.CheckBox.isChecked()' on a null object reference
at com.conta.app.spyear.WelcomeActivity$2.onPageSelected(WelcomeActivity.java:81)
at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1939)
at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:679)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:663)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:624)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:605)
at com.conta.app.spyear.WelcomeActivity$1.onClick(WelcomeActivity.java:56)
at android.view.View.performClick(View.java:7448)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…