簡體   English   中英

如何使用asynctask在按鈕中添加進度對話框

[英]how to add progress dialog in button with asynctask

我嘗試這個教程

我仍然困惑如何使用asynctask在按鈕注銷中添加進度對話框

這是我的活動。

package hariff.ltis.mainmenu;

import hariff.ltis.inputhama.CInputHamaApp;
import hariff.ltis.library.DatabaseHandler;
import hariff.ltis.library.UserFunctions;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import hariff.ltis.mainmenu.R;

public class MainMenu extends Activity{
    UserFunctions userFunctions;
    Button btnLogout;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        userFunctions = new UserFunctions();
        if(userFunctions.isUserLoggedIn(getApplicationContext())){
        setContentView(R.layout.main);
        btnLogout = (Button) findViewById(R.id.btnLogout);
        btnLogout.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                userFunctions.logoutUser(getApplicationContext());
                Intent login = new Intent(getApplicationContext(), LoginActivity.class);
                login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                startActivity(login);
                // Closing dashboard screen
                finish();
            }


        });


        loadUser();

        View button3Click = findViewById(R.id.button3);
        button3Click.setOnClickListener(new View.OnClickListener(){
             public void onClick(View v) {
                 // Perform action on click
                DataHama();
             }
        });

        }else{
            // user is not logged in show login screen
            Intent login = new Intent(getApplicationContext(), LoginActivity.class);
            login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(login);
            // Closing dashboard screen
            finish();
        }





    }
    /*private void InputData(){
        Intent i = new Intent(this, SaveData.class);
        startActivity(i);
    }

    private void CheckData(){
        Intent i1 = new Intent(this, CheckData.class);
        startActivity(i1);
    }*/

    private void loadUser() {
        TextView txt = (TextView) findViewById(R.id.textUser);
        // database handler
        DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 
        // Spinner Drop down elements
        SQLiteDatabase dbs = db.getReadableDatabase();

        Cursor cursor = dbs.rawQuery("SELECT * FROM login", null);
      if (cursor.moveToFirst()) {
         do {
            String emailid=cursor.getString(2); // Here you can get data from table and stored in string if it has only one string.
           txt.setText(emailid);


         } while (cursor.moveToNext());
      }
      if (cursor != null && !cursor.isClosed()) {
         cursor.close();
      }
      if(db!=null)
      {
          db.close();
      }
        // Creating adapter for spinner


    }


    private void DataHama(){
        Intent i2 = new Intent(this, CInputHamaApp.class);
        startActivity(i2);
    }



}

因此,當我單擊按鈕注銷時,進度對話框將顯示並有一個時間,例如5秒。 怎么做?

按鈕注銷EDIT:

btnLogout.setOnClickListener(new View.OnClickListener() {

          public void onClick(View arg0) {
            // TODO Auto-generated method stub
          logoutUserOperation loguttask = new logoutUserOperation(MainMenu.this);
          loguttask.execute("");

           }

         });

這是logoutUser函數

/**
     * Function to logout user
     * Reset Database
     * */
    public boolean logoutUser(Context context){
        DatabaseHandler db = new DatabaseHandler(context);
        db.resetTables();
        return true;
    }

編輯:這是asynctask

private class logoutUserOperation extends AsyncTask<String, Void, Boolean> {
        ProgressDialog progressDialog;
        Context context;
        public logoutUserOperation(Context context){
        this.context=context;
        }
              @Override
              protected void onPreExecute() {
              progressDialog = ProgressDialog.show(context, "", "Logout...");
              }
              @Override
              protected Boolean doInBackground(String... params) {
                    boolean boollogout=userFunctions.logoutUser(context);
                    return boollogout;
              }      

              @Override
              protected void onPostExecute(Boolean result) { 
                  progressDialog.dismiss();
                  if(result){
                        Intent login = new Intent(context,LoginActivity.class);
                        login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                        context.startActivity(login);
                        // Closing dashboard screen
                        context.finish();
                   }else{
                      // your code here...
                   }              
              }
        }

當我嘗試但顯示錯誤

The method finish() is undefined for the type Context

BR

亞歷克斯

編輯:這是睡眠5秒的代碼

protected Boolean doInBackground(String... params) {


                  boolean boollogout=userFunctions.logoutUser(context);

                          try{
                                  Thread.sleep( 5000 );


                          } catch( Exception e ){
                                  Log.i("Logout", e.getMessage() );
                          }

                  return boollogout;


              }      

您可以使用AsyncTask在按鈕單擊上顯示ProgressDialog ,如下所示:

private class logoutUserOperation extends AsyncTask<String, Void, Boolean> {
ProgressDialog progressDialog;
Context context;
public logoutUserOperation(Context context){
this.context=context;
}
      @Override
      protected void onPreExecute() {
      progressDialog = ProgressDialog.show(context, "", "Logout...");
      }
      @Override
      protected boolean doInBackground(String... params) {
            boolean boollogout=userFunctions.logoutUser(context);
            return boollogout;
      }      

      @Override
      protected void onPostExecute(boolean result) { 
          progressDialog.dismiss();
          if(result){
                Intent login = new Intent(context, 
                                             LoginActivity.class);
                login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                context.startActivity(login);
                // Closing dashboard screen
                context.finish();
           }else{
              // your code here...
           }              
      }
}

並在單擊按鈕時啟動AsyncTask:

btnLogout.setOnClickListener(new View.OnClickListener() {

  public void onClick(View arg0) {
    // TODO Auto-generated method stub
  logoutUserOperation loguttask = new logoutUserOperation(MainMenu.this);
  loguttask.execute("");

   }

 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM