Click here to Skip to main content
15,896,207 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
Hey guys I'm learning android by making an simple app I though up. What I'm trying to make is an simple app that every second lights up a button then a second later the light turns off, if the user hits the button while its lit up they get a point. the button which gets lit up depends on a random number generator.

I'm currently using a tutorial I found on ScheduledExecutorService to create a timer, the program outputs correctly in the console but gets stuck after updating the program once after I added the code to update a label every tick. Heres the code

Java
private final ScheduledExecutorService scheduler =   Executors.newScheduledThreadPool(1);    
  public void beepForAnHour() 
  {
	 
	  final Runnable beeper = new Runnable() 
	  {
		 
		     public void run() 
		     { 		    	
		    			    	 
		    	// int Min = 1;
		    	// int Max = 3;
		    	// randomNum = (int) (Math.random() * ( Max - Min ));		
		    	 
		    	 time=time+1;		    	 
		    	 System.out.println(Integer.toString(time)+" test"); 

                       //without these 2 lines the timer keeps increasing correctly	
		    	 TextView Time = (TextView)findViewById(R.id.lblSetTime);
		         Time.setText(Integer.toString(time));
		    	 
		     }
		   
      };
      final ScheduledFuture beeperHandle =   scheduler.scheduleAtFixedRate(beeper, 0, 1, SECONDS);
      scheduler.schedule(new Runnable() { public void run() { beeperHandle.cancel(true); } }, 60 * 60, SECONDS);
  
  }


Any suggestions why this is a problem? And any advise on lighting the button up and off again? I planned to have a random number generator light up a button depending on the number generated.

I imagine I would also have to have if statement on the cancel part of the timer so when "lives = 0" the timer stops and the game ends although that can be looked at later. So now I just need to understand what I am doing wrong
Posted
Updated 26-Dec-12 2:28am
v2

1 solution

Put a try/catch around those 2 lines and you will see that TextView is probably not initalized at that point of your app's life cycle.

That's because the function findViewById(int) out of the class
Activity
[^] can not return a valid value at that point.
Please read in the Documentation of Activity.
 
Share this answer
 
v2
Comments
Phoenix234 26-Dec-12 14:04pm    
I thought I put it in the same class but I will have a look and get back to you.

Is it common for the SDK not to give errors on this kind of thing? It seems like something that usually gets a red line under it
TorstenH. 27-Dec-12 12:07pm    
the SDK would bring an exception - if it had the chance to.
Wrap the code in a try/catch and you'll get the exception. It's suppressed otherwise.
Phoenix234 29-Dec-12 18:36pm    
Ah Yes I see that now, how would I update the timer UI then?

Also while this timer is running I want timer to be created everytime a button lights up and 1 second later the timer get destroyed and the button go back to normal. suggestions on what I should be looking at?
TorstenH. 30-Dec-12 2:38am    
I would extend the button and give it that default-behavior you want.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900