coolbho3k wrote: > Okay, so I am creating a test program (my version of "hello world" > every time I start developing on a new platform) that flashes the > numbers 0 through 500 on the screen rapidly. Here's what I have in my > main Java file so far. Problem is, it won't display anything. Anyone > know what is wrong? > > I have some experience in C/C++ but I'm almost completely new to Java. > Thanks! > > package com.mh.test; > > import android.app.Activity; > import android.os.Bundle; > import android.widget.TextView; > > public class AndroidTest extends Activity { > /** Called when the activity is first created. */ > @Override > public void onCreate(Bundle savedInstanceState) { > TextView tv = new TextView(this); > super.onCreate(savedInstanceState); > for(int i=0; i >= 500; i++) > { > tv.setText(Integer.toString(i)); > setContentView(tv); > try { > Thread.sleep(4000); > } catch (InterruptedException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } > > } > > } > }
Simple answer: you're not letting Android do anything. Somewhat more complicated answer: Writing for Android is a little like writing for other UI toolkits that have the notion of a "UI thread". Java/Swing and 16-bit Windows come to mind from personal experience, though I assume other systems use a similar pattern. All your calls to the activity (e.g., setContentView()) and all your changes to the widgets (e.g., setText()) queue up messages in a message loop. These messages will not get processed until you leave the callback method you are in (onCreate()). What I would expect to happen if you ran this would be to get a "process not responding" error, since this implementation seems to want to run for 2,000 seconds (500 passes with a 4-second sleep), which is a wee bit longer than Android wants to be tied up in one of the callbacks. So, here's what you do: In onCreate(), set up the TextView, make it be the activity's UI via setContentView(), set the TextView to "0", and call postDelayed() on the TextView to queue up an event 4,000ms later. In that event (a Java Runnable object's run() method), you would increment the TextView and call postDelayed() again to queue up another event 4,000ms later. Lather, rinse, and repeat until you get to 500, then don't call postDelayed() again. The most important thing, though, is after your first call to postDelayed() is to return out of onCreate(), so Android can start doing what you're telling it to. If you want it to run as fast as possible, instead of a 4-second delay, use post() instead of postDelayed(). There are other approaches to this -- my book has a similar sample app, updating a progress bar and using a Handler to manage a background thread. -- Mark Murphy (a Commons Guy) http://commonsware.com _The Busy Coder's Guide to Android Development_ Version 2.0 Published! --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Beginners" group. To post to this group, send email to android-beginners@googlegroups.com To unsubscribe from this group, send email to android-beginners-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-beginners?hl=en -~----------~----~----~----~------~----~------~--~---