How to get Progressdialog to show in onCreate

Put problem concerning Views, Layouts and other XML-Resources (like AndroidManifest) here.

How to get Progressdialog to show in onCreate

Postby IHeartAndroid » Tue Jul 28, 2009 8:40 am

Hi again,

When my application starts the first time a database gets initialized. Since this takes about 5-10 sec I want to inform the user about that.

So far I have my "Get from XML and Write to database" stuff in a seperate thread and the progressdialog does work when it is started by clicking on a button. So this works.

But now I want to automatize this behaviour by invoking the function (that was called when clicking the button) at the end of the OnCreate statement of the Acitivity. When I try this, the ProgressDialog won't show.

Here my Code:


MainActivity:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.  
  3.  
  4. public class MyActivity extends Activity {
  5.  
  6.  
  7.  
  8. //Private local members
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.         // Gets called when a message is sent from the Thread
  17.  
  18.         private Handler mainActivityHandler = new Handler() {
  19.  
  20.                 @Override
  21.  
  22.                 public void handleMessage(Message msg) {
  23.  
  24.                         if(msg.what==GlobalValues.HANDLER_RESULT) {
  25.  
  26.                                 listOfMyItems = myDB.getAllMyItems();
  27.  
  28.                                 dismissWaitDialog();
  29.  
  30.                                 displayItem();
  31.  
  32.                         }
  33.  
  34.                 }
  35.  
  36.         };
  37.  
  38.  
  39.  
  40.         @Override
  41.  
  42.         protected Dialog onCreateDialog(int id) {
  43.  
  44.                 switch (id) {
  45.  
  46.                 case DIALOG_INITIALIZE: {
  47.  
  48.                         processDialog = new ProgressDialog(this);
  49.  
  50.                         processDialog.setMessage("Loading...");
  51.  
  52.                         processDialog.setIndeterminate(true);
  53.  
  54.                         processDialog.setCancelable(true);
  55.  
  56.                         return processDialog;
  57.  
  58.                 }
  59.  
  60.                 }
  61.  
  62.                 return null;
  63.  
  64.  
  65.  
  66.         }
  67.  
  68.  
  69.  
  70.         /**
  71.  
  72.          * Dismisses the dialog if it has been shown previously.
  73.  
  74.          *
  75.  
  76.          * @see {@link Activity#onResume()}
  77.  
  78.          */
  79.  
  80.         @Override
  81.  
  82.         public void onResume() {
  83.  
  84.                 super.onResume();
  85.  
  86.                 dismissWaitDialog();
  87.  
  88.         }
  89.  
  90.  
  91.  
  92.         /**
  93.  
  94.          * Dismiss the dialog if it has already been shown.
  95.  
  96.          */
  97.  
  98.         private void dismissWaitDialog() {
  99.  
  100.                 if (processDialog != null)
  101.  
  102.                         dismissDialog(DIALOG_INITIALIZE);
  103.  
  104.         }
  105.  
  106.  
  107.  
  108.         /**
  109.  
  110.          * Show the dialog with the specified message.
  111.  
  112.          *
  113.  
  114.          * @param msg
  115.  
  116.          *            the message to set on the dialog.
  117.  
  118.          */
  119.  
  120.         private void showWaitDialog(String msg) {
  121.  
  122.                 if (processDialog == null || !processDialog.isShowing())
  123.  
  124.                         showDialog(DIALOG_INITIALIZE);
  125.  
  126.  
  127.  
  128.                 processDialog.setMessage(msg);
  129.  
  130.         }
  131.  
  132.  
  133.  
  134.  
  135.  
  136.         /** Called when the activity is first created. */
  137.  
  138.         @Override
  139.  
  140.         public void onCreate(Bundle icicle) {
  141.  
  142.                 super.onCreate(icicle);
  143.  
  144.                 setContentView(R.layout.main);
  145.  
  146.  
  147.  
  148.                 //.. some delcarations
  149.  
  150.                
  151.  
  152.                 initMainView();
  153.  
  154.  
  155.  
  156.                 myDB = new MyDB(this);
  157.  
  158.                
  159.  
  160.                
  161.  
  162.                
  163.  
  164.                 // THIS IS THE FUNCTION THAT HAS BEEN CALLED IN THE ONCLICK FUNCTION OF A BUTTON BEFORE
  165.  
  166.                 fillActivityWithContent();
  167.  
  168.         }
  169.  
  170.  
  171.  
  172.         /**
  173.  
  174.          * Initialize the View of the Activity
  175.  
  176.          */
  177.  
  178.         private void initMainView() {
  179.  
  180.                 //Some referencing of local members to layout attributes
  181.  
  182.                 error = (TextView) findViewById(R.id.Error);
  183.  
  184.                 // button = (Button) ......
  185.  
  186.                 //....
  187.  
  188.                
  189.  
  190.         }
  191.  
  192.  
  193.  
  194.         private void fillActivityWithContent() {
  195.  
  196.                 try {
  197.  
  198.  
  199.  
  200.                         listOfmyItems = myDB.getAllMyItems();
  201.  
  202.  
  203.  
  204.                         // database empty? Then initialize database by parsing the XML document
  205.  
  206.                         if (listOfmyItems.isEmpty()) {
  207.  
  208.                                 showWaitDialog("Initialize DB...");                            
  209.  
  210.                                 myThread t = new myThread(this, R.raw.myxmldoc, mainActivityHandler);
  211.  
  212.                                 t.start();
  213.  
  214.                         }      
  215.  
  216.                         else
  217.  
  218.                                 displayItem();
  219.  
  220.                 } catch (Exception e) {
  221.  
  222.                         error.setVisibility(View.VISIBLE);
  223.  
  224.  
  225.  
  226.                         anothertextview.setVisibility(View.GONE);
  227.  
  228.                         //..
  229.  
  230.                         Log.e("ERROR", "Error:", e);
  231.  
  232.                 }
  233.  
  234.  
  235.  
  236.  
  237.  
  238.         }
  239.  
  240.  
  241.  
  242.  
  243.  
  244.         private void displayItem() {
  245.  
  246.                
  247.  
  248.                 for (int i = 0; i < listOfMyItems.size(); i++) {
  249.  
  250.                         if (listOfMyItems.get(i).getMsomething().equals(something)) {
  251.  
  252.                                 arrayIndex = i;
  253.  
  254.                                 break;
  255.  
  256.                         }
  257.  
  258.                 }
  259.  
  260.  
  261.  
  262.                 if (!listOfMyItems.isEmpty() && listOfMyItems.size() > arrayIndex) {
  263.  
  264.                         anothertextview.setText(listOfmyItems.get(arrayIndex).getMsomething());
  265.  
  266.                         //...
  267.  
  268.                 }
  269.  
  270.         }
  271.  
  272. }
  273.  
  274.  
Parsed in 0.041 seconds, using GeSHi 1.0.8.4


Thread:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. public class myThread extends Thread {
  3.  
  4.  
  5.  
  6.         private Context myContext;
  7.  
  8.         private InputStream myInputStream;
  9.  
  10.         private Handler myHandler;
  11.  
  12.  
  13.  
  14.         public myThread(Context ctx, int resource, Handler ha) {
  15.  
  16.                 myContext = ctx;
  17.  
  18.                 myInputStream = ctx.getResources().openRawResource(resource);
  19.  
  20.                 myHandler = ha;
  21.  
  22.         }
  23.  
  24.  
  25.  
  26.         @Override
  27.  
  28.         public void run() {
  29.  
  30.                 try {
  31.  
  32.                         SAXParserFactory spf = SAXParserFactory.newInstance();
  33.  
  34.                         SAXParser sp = spf.newSAXParser();
  35.  
  36.                         XMLReader xr = sp.getXMLReader();
  37.  
  38.                         MyXmlHandler myXmlHandler = new MyXmlHandler();
  39.  
  40.                         xr.setContentHandler(myXmlHandler);
  41.  
  42.                         xr.parse(new InputSource(myInputStream));
  43.  
  44.  
  45.  
  46.                         ArrayList<myItem> listOfMyItems = MyXmlHandler.getMyItems();
  47.  
  48.  
  49.  
  50.                         MyDB myDB = new MyDB(myContext);
  51.  
  52.  
  53.  
  54.                         for (MyItem m : listOfMyItems) {
  55.  
  56.                                 myDB.writeItem(m);
  57.  
  58.                         }
  59.  
  60.                        
  61.  
  62.                         Message msg = new Message();
  63.  
  64.                         msg.what = GlobalValues.HANDLER_RESULT;
  65.  
  66.                         myHandler.sendMessage(msg);
  67.  
  68.  
  69.  
  70.                 } catch (Exception e) {
  71.  
  72.                 }
  73.  
  74.         }
  75.  
  76. }
  77.  
  78.  
Parsed in 0.035 seconds, using GeSHi 1.0.8.4



This all works if the fillActivityWithContent(); method is invoked after creation by a buttonclick.
How can I get this done by invoking it at the end of the OnCreate statement, as displayed above ?

Thanks for your help.
User avatar
IHeartAndroid
Junior Developer
Junior Developer
 
Posts: 24
Joined: Wed Jul 08, 2009 8:51 am

Top

Postby mangaluve » Tue Jul 28, 2009 10:18 am

Hello,

well that's because onResume is invoked after onCreate (because the Activity is now in the foreground), so you show the dialog but dismiss it immediately.
mangaluve
Experienced Developer
Experienced Developer
 
Posts: 82
Joined: Mon Mar 23, 2009 8:59 pm

Postby IHeartAndroid » Tue Jul 28, 2009 1:07 pm

thank you.
By deleting the dismissdialog() invocation from the Onresume I got it working.
User avatar
IHeartAndroid
Junior Developer
Junior Developer
 
Posts: 24
Joined: Wed Jul 08, 2009 8:51 am

Top

Return to View, Layout & Resource Problems

Who is online

Users browsing this forum: Google Feedfetcher and 1 guest