androidnfc-p2p

Progress Dialog not show on screen


I edited my code according dear Mayank'answer but It does not show any message that is sended as input in displayMsg() method before method begines..I should say MethodTest() is started with nfc and in method onNewIntent(Intent intent)

@Override
protected void onNewIntent(Intent intent) {
   MethodTest();
    ..............

}

public void MethodTest() {
    DisplayMsg("method 1 is running");
    Method1();

    DisplayMsg("method 2 is running");
    Method2();

    DisplayMsg("method 3 is running");
    Method3();

}

private int DisplayMsg(String msg) {
    totalMsg += msg;
    DisplayMsgClass dc = new DisplayMsgClass();
    dc.doInBackground(totalMsg);
}

private class DisplayMsgClass extends AsyncTask<String, Integer, String> {

    @Override
    protected void onPreExecute() {
         textView.setText("Hello !!!");
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        progressBar.setVisibility(View.VISIBLE);
        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);

    }

    @Override
    protected String doInBackground(String... Messages) {


        return Messages[0];
    }

    @Override
    protected void onPostExecute(String result) {
        progressBar.setVisibility(View.INVISIBLE);

        textView.setText(result);
    }
}

in my layout:

<LinearLayout>
<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:id="@+id/progressBar1"
    />
 <TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/textv1"
  android:hint="AppletPass"
  android:gravity="center"/>
 </LinearLayout>

Solution

  • Remember that AsyncTasks should ideally be used for short operations (a few seconds at the most.)

    Try to learn more about AsyncTask and there are so many mistakes in your code

    1. Do not call doInBackground() manually.

      dc.doInBackground(totalMsg); // Error

    2. DisplayMsg() called several times, each time a new instance of class DisplayMsgClass created

      DisplayMsgClass dc = new DisplayMsgClass(); // Error

    3. onPreExecute()
      textView.setText("Hello !!!"); // NullPointerException. textView.setText() is called without initializing it.

    Caution

    Do not call AsyncTask.execute() more than one on a same intance.
    For eg:

    DisplayMsgClass displayMsgClass = new DisplayMsgClass();  
    displayMsgClass.execute();  
    displayMsgClass.execute(); //Error, IllegalStateException  
    

    will show you a basic demo based on you implementation and you can simply modify it according to your own way.

    public void MethodTest() {
    
        // execute task
        new DisplayMsgClass().execute("Download now");
    }
    
    /*
    public void MethodTest() {
        DisplayMsg("method 1 is running");
        Method1();
    
        DisplayMsg("method 2 is running");
        Method2();
    
        DisplayMsg("method 3 is running");
        Method3();
    
    }
    
    private int DisplayMsg(String msg) {
        totalMsg += msg;
        DisplayMsgClass dc = new DisplayMsgClass();
        dc.doInBackground(totalMsg);
    }
    */
    
    private class DisplayMsgClass extends AsyncTask<String, Integer, String> {
    
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
    
            // retrieve the widgets
            progressBar = (ProgressBar) findViewById(R.id.progressBar1);
            textView = (TextView) findViewById(R.id.textv1);
    
    
            textView.setText("Download initialized");
            progressBar.setVisibility(View.VISIBLE);
        }
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }
    
        @Override
        protected String doInBackground(String... Messages) {
    
            // read commands
            String command = Messages[0];
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Download completed";
        }
    
        @Override
        protected void onPostExecute(String result) {
    
            //invoked on the UI thread after the background computation finishes
            progressBar.setVisibility(View.INVISIBLE);
            textView.setText(result);
        }
    }