-1

ログインフォームがあり、sheredpreferences を使用してログインを保存します。ユーザーが [記憶する] ボタンを押さない場合は、ユーザー名を 5 分間保存し、その後ユーザー名を削除します。ログイン後、たとえば 3 分が経過したとしましょう。アプリを閉じます。タイマーを実行する必要がなくなりました。実行中のアクティビティ (この場合は lertags.java) からタイマーを閉じるにはどうすればよいですか?

コードはこちら...

login.java

  CheckBox checkBox = (CheckBox) findViewById(R.id.silent_switch);
        if(checkBox.isChecked())
        {

            //save data username and password

            SharedPreferences.Editor prefEditor = gameSettings.edit();  
            prefEditor.putString("UserName",txtperson.getText().toString());  
            prefEditor.putString("Password", txtpass.getText().toString());  
            prefEditor.commit();

        }
        else

        {
            //create timer for 10 seconds,after that delete the user 


                TimerTask updateProfile = new CustomTimerTask(Login.this);
                timer.schedule(updateProfile, 10000);

        }
            //save the value user and the poosition

            SharedPreferences.Editor prefEditor = gameSettings.edit();  
            prefEditor.putString("User",user);  
            prefEditor.putString("Posto", posto); 

            prefEditor.commit();  

      //mensagemexibir("Login", "Welcome: "+user);


            Intent i = new Intent(Login.this, LerTags.class);

             startActivityForResult(i, 2);
              setResult(2);
             finish();

CustomTimertask.java

public class CustomTimerTask extends TimerTask {


private Context context;
private Handler mHandler = new Handler();

// Write Custom Constructor to pass Context
public CustomTimerTask(Context con) {
    this.context = con;
}

@Override
public void run() {
    // TODO Auto-generated method stub

    // your code starts here.
    // I have used Thread and Handler as we can not show Toast without starting new thread when we are inside a thread.
    // As TimePicker has run() thread running., So We must show Toast through Handler.post in a new Thread. Thats how it works in Android..
    new Thread(new Runnable() {
        public void run() {

            mHandler.post(new Runnable() {
                public void run() {
                 Toast.makeText( context, "10 seconds pass delete the user", Toast.LENGTH_LONG).show();
SharedPreferences.Editor prefEditor = gameSettings.edit();  
            prefEditor.putString("User","");  


            prefEditor.commit();  
                                        }


            });
        }
    }).start();

}

public void startact() {
    // TODO Auto-generated method stub

}
4

3 に答える 3

0

すべてのアクティビティでグローバル変数を維持する最善の方法は、Applicationクラスでカスタム タイマー変数を維持することです。

A1)拡張するクラス(例)を作成するApplication

2) TimerTask updateProfileClass にインスタンスを作成しますA

3) クラス内にタイマータスクを起動・キャンセルするメソッドを作成A[例: startTimer(), cancelTimer()]

3) これで、移動先のユーザーからアクセスできるようActivityになりました。

4) どのアクティビティからでも、タイマーをキャンセルできます [例: ((A)getApplicationContext()).cancelTimer()]。

于 2013-01-29T19:18:52.020 に答える
0

とてもシンプルです。CustomTimerTask を使用しているので、単にアプリケーションを閉じようとしているとき、たとえば onDestroy () またはアプリケーションのその他の終了ポイントを次のように記述します。

updateProfile.cancel();

このためには、「 updateProfile 」変数の参照を保存する必要があります。詳細については、ここをクリックするか、ここをクリックしてください。

于 2013-01-29T19:04:52.190 に答える
0

タスクをクラスのメンバー変数に保存し、それが不要になったらキャンセルを呼び出します (正確に何をしたいかによって、onPause または onStop で言います)。

于 2013-01-29T18:48:47.203 に答える