This funcion is crashing my app and im not sure why.
public void whileLoopForChange(){
while (gameRunning = true){
View someView = findViewById(R.id.screen);
final View root = someView.getRootView();
Random rand = new Random();
final int value = rand.nextInt(15);
if(lvl<10){
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if(value == 1){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red));
currentColor = "red";
}else if(value == 2){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink));
currentColor = "pink";
}else if(value == 3){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange));
currentColor = "orange";
}else if(value == 4){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue));
currentColor = "blue";
}else if(value == 5){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green));
currentColor = "green";
}else if(value == 6){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White));
currentColor = "white";
}else if(value == 7){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black));
currentColor = "black";
}else if(value == 8){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon));
currentColor = "salmon";
}else if(value == 9){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet));
currentColor = "violet";
}else if(value == 10){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan));
currentColor = "cyan";
}else if(value == 11){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray));
currentColor = "darkgray";
}else if(value == 12){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray));
currentColor = "gray";
}else if(value == 13){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate));
currentColor = "chocolate";
}else if(value == 14){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver));
currentColor = "silver";
}
}
}, 1000);
}else if(lvl<15 && lvl>9) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if(value == 1){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red));
currentColor = "red";
}else if(value == 2){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink));
currentColor = "pink";
}else if(value == 3){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange));
currentColor = "orange";
}else if(value == 4){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue));
currentColor = "blue";
}else if(value == 5){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green));
currentColor = "green";
}else if(value == 6){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White));
currentColor = "white";
}else if(value == 7){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black));
currentColor = "black";
}else if(value == 8){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon));
currentColor = "salmon";
}else if(value == 9){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet));
currentColor = "violet";
}else if(value == 10){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan));
currentColor = "cyan";
}else if(value == 11){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray));
currentColor = "darkgray";
}else if(value == 12){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray));
currentColor = "gray";
}else if(value == 13){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate));
currentColor = "chocolate";
}else if(value == 14){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver));
currentColor = "silver";
}
}
}, 750);
}else if(lvl<20 && lvl>14){
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if(value == 1){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red));
currentColor = "red";
}else if(value == 2){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink));
currentColor = "pink";
}else if(value == 3){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange));
currentColor = "orange";
}else if(value == 4){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue));
currentColor = "blue";
}else if(value == 5){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green));
currentColor = "green";
}else if(value == 6){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White));
currentColor = "white";
}else if(value == 7){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black));
currentColor = "black";
}else if(value == 8){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon));
currentColor = "salmon";
}else if(value == 9){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet));
currentColor = "violet";
}else if(value == 10){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan));
currentColor = "cyan";
}else if(value == 11){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray));
currentColor = "darkgray";
}else if(value == 12){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray));
currentColor = "gray";
}else if(value == 13){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate));
currentColor = "chocolate";
}else if(value == 14){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver));
currentColor = "silver";
}
}
}, 600);
}else if(lvl<30 && lvl>19){
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if(value == 1){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red));
currentColor = "red";
}else if(value == 2){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink));
currentColor = "pink";
}else if(value == 3){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange));
currentColor = "orange";
}else if(value == 4){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue));
currentColor = "blue";
}else if(value == 5){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green));
currentColor = "green";
}else if(value == 6){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White));
currentColor = "white";
}else if(value == 7){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black));
currentColor = "black";
}else if(value == 8){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon));
currentColor = "salmon";
}else if(value == 9){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet));
currentColor = "violet";
}else if(value == 10){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan));
currentColor = "cyan";
}else if(value == 11){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray));
currentColor = "darkgray";
}else if(value == 12){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray));
currentColor = "gray";
}else if(value == 13){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate));
currentColor = "chocolate";
}else if(value == 14){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver));
currentColor = "silver";
}
}
}, 550);
}else if(lvl<50 && lvl>29){
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if(value == 1){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red));
currentColor = "red";
}else if(value == 2){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink));
currentColor = "pink";
}else if(value == 3){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange));
currentColor = "orange";
}else if(value == 4){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue));
currentColor = "blue";
}else if(value == 5){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green));
currentColor = "green";
}else if(value == 6){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White));
currentColor = "white";
}else if(value == 7){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black));
currentColor = "black";
}else if(value == 8){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon));
currentColor = "salmon";
}else if(value == 9){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet));
currentColor = "violet";
}else if(value == 10){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan));
currentColor = "cyan";
}else if(value == 11){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray));
currentColor = "darkgray";
}else if(value == 12){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray));
currentColor = "gray";
}else if(value == 13){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate));
currentColor = "chocolate";
}else if(value == 14){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver));
currentColor = "silver";
}
}
}, 500);
}else if(lvl<49){
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if(value == 1){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red));
currentColor = "red";
}else if(value == 2){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink));
currentColor = "pink";
}else if(value == 3){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange));
currentColor = "orange";
}else if(value == 4){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue));
currentColor = "blue";
}else if(value == 5){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green));
currentColor = "green";
}else if(value == 6){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White));
currentColor = "white";
}else if(value == 7){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black));
currentColor = "black";
}else if(value == 8){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon));
currentColor = "salmon";
}else if(value == 9){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet));
currentColor = "violet";
}else if(value == 10){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan));
currentColor = "cyan";
}else if(value == 11){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray));
currentColor = "darkgray";
}else if(value == 12){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray));
currentColor = "gray";
}else if(value == 13){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate));
currentColor = "chocolate";
}else if(value == 14){
root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver));
currentColor = "silver";
}
}
}, 350);
}
}
The app runs fine when I remove the function and the call to it. Im pretty new to android but have java experiance. The call for this function is in the onCreate method after everything that defaultly comes in that method. I havent put anything in the layout xml file and i have no other functions but onCreate in my main activity.
EDIT 1: Removing the timer makes the app not crash. How would I replace the timer function with something that makes the code run after for say a second?
EDIT 2: Logcat: --------- beginning of crash 07-28 15:15:37.259 32203-32203/? E/AndroidRuntime: FATAL EXCEPTION: main Process: io.eliot.colorstop, PID: 32203 java.lang.RuntimeException: Unable to start activity ComponentInfo{io.eliot.colorstop/io.eliot.colorstop.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' on a null object reference at io.eliot.colorstop.MainActivity.whileLoopForChange(MainActivity.java:34) at io.eliot.colorstop.MainActivity.onCreate(MainActivity.java:29) at android.app.Activity.performCreate(Activity.java:6955) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
After reading the logcat it seems that its getting the root view that crashes it.