Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android如何使用SharedReference编程秒表_Java_Android - Fatal编程技术网

Java android如何使用SharedReference编程秒表

Java android如何使用SharedReference编程秒表,java,android,Java,Android,我正在用android sdk编程秒表,但我想在按下back键的时候继续。我在某种程度上理解活动生命周期,我应该过度使用onPause和onResume方法,但我不知道如何使用它们,因为SharePreference编辑器不能接收计时器对象 package com.example.taekwondobuddy.util; import android.app.Activity; import android.content.SharedPreferences; import androi

我正在用android sdk编程秒表,但我想在按下back键的时候继续。我在某种程度上理解活动生命周期,我应该过度使用onPause和onResume方法,但我不知道如何使用它们,因为SharePreference编辑器不能接收计时器对象

    package com.example.taekwondobuddy.util;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.LinearLayout;



 public class Time extends Activity {
 Chronometer mChronometer;

@Override
  protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);

mChronometer = new Chronometer(this);
layout.addView(mChronometer);

Button startButton = new Button(this);
startButton.setText("Start");
startButton.setOnClickListener(mStartListener);
layout.addView(startButton);

Button stopButton = new Button(this);
stopButton.setText("Stop");
stopButton.setOnClickListener(mStopListener);
layout.addView(stopButton);

Button resetButton = new Button(this);
resetButton.setText("Reset");
resetButton.setOnClickListener(mResetListener);
layout.addView(resetButton);        

setContentView(layout);
}



View.OnClickListener mStartListener = new OnClickListener() {
public void onClick(View v) {
    mChronometer.start();

}
};

View.OnClickListener mStopListener = new OnClickListener() {
public void onClick(View v) {
    mChronometer.stop();

}
};

View.OnClickListener mResetListener = new OnClickListener() {
public void onClick(View v) {
    mChronometer.setBase(SystemClock.elapsedRealtime());

 }
 };
 }

有什么建议吗?谢谢你的帮助

如果您想在停止倒计时的地方继续倒计时,而不是需要共享首选项,如果您想继续计时,即使用户按“后退”按钮,您也不需要共享首选项,共享首选项用于存储基元和字符串数据类型,您可以使用或执行此操作,但是,如果您使用的是计时表,则无法将其自身存储在共享首选项中,而只能将其值存储在
elapsedRealtime()
或其他方法返回的值中
在AsyncTask或服务中,您可以保持轮询
elapsedRealtime()
AsyncTask
保持活动状态,直到其
doInBackground
方法完成,即使您按下后退按钮
AsyncTask
保持活动状态

是否要暂停计时器并在按下后退按钮时保存状态?是,我希望它的状态是我回去时离开的地方
// try this
public class Time extends Activity {
    Chronometer mChronometer;
    private SharedPreferences sharedPreferences;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        sharedPreferences = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        mChronometer = new Chronometer(this);

        layout.addView(mChronometer);

        Button startButton = new Button(this);
        startButton.setText("Start");
        startButton.setOnClickListener(mStartListener);
        layout.addView(startButton);

        Button stopButton = new Button(this);
        stopButton.setText("Stop");
        stopButton.setOnClickListener(mStopListener);
        layout.addView(stopButton);

        Button resetButton = new Button(this);
        resetButton.setText("Reset");
        resetButton.setOnClickListener(mResetListener);
        layout.addView(resetButton);

        setContentView(layout);
    }

    private void showElapsedTime() {
        long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase();
        Toast.makeText(MyActivity.this, "Elapsed milliseconds: " + elapsedMillis,
                Toast.LENGTH_SHORT).show();
    }

    View.OnClickListener mStartListener = new View.OnClickListener() {
        public void onClick(View v) {
            int stoppedMilliseconds = 0;

            String chronoText = mChronometer.getText().toString();
            String array[] = chronoText.split(":");
            if (array.length == 2) {
                stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000
                        + Integer.parseInt(array[1]) * 1000;
            } else if (array.length == 3) {
                stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000
                        + Integer.parseInt(array[1]) * 60 * 1000
                        + Integer.parseInt(array[2]) * 1000;
            }

            mChronometer.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds);
            mChronometer.start();
        }
    };

    View.OnClickListener mStopListener = new View.OnClickListener() {
        public void onClick(View v) {
            mChronometer.stop();
        }
    };

    View.OnClickListener mResetListener = new View.OnClickListener() {
        public void onClick(View v) {
            mChronometer.setBase(SystemClock.elapsedRealtime());
        }
    };

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        prepareSharedData();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mChronometer.setText(sharedPreferences.getString("time", "00:00"));
    }

    @Override
    protected void onPause() {
        super.onPause();
        prepareSharedData();
    }

    public void prepareSharedData(){
        String chronoText = mChronometer.getText().toString();
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("time", chronoText);
        editor.commit();
    }
}