2013-02-07 23 views
0

添加進度對話框中的按鈕,我嘗試這個Tutorial如何使用的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秒。怎麼做?

按鈕退出編輯:

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; 


       }  
+0

plz還添加logoutUser方法代碼的問題,你是否使用logoutUser內的asynctask? –

+0

完成。我在我的問題中添加了函數logoutUser @ρяσѕρєяK –

回答

1

您可以使用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(""); 

    } 

}); 
+0

在'context.finish();'...中顯示錯誤'方法finish()未定義類型上下文@@ρяσѕρєяK –

+1

解決了我嘗試'((MainMenu)上下文).finish();'非常感謝你@ΚяσѕρєяK –

+0

@Alexbelek:最受歡迎的朋友。你也可以使用'MainMenu.this.finish();'在'onPostExecute'內完成活動 –