1

私はこの問題を数日間抱えています。データを設定するときに、共有設定が機能していないようです。ユーザーは「oncreate」を表示するメインから開始し、設定ページ(データが自動的に設定される場所(今のところ))に移動し、メインのアクティビティに戻ると、データが来ないようです. 私は joda Time ライブラリを使用しており、2 つの日付の差を計算しようとしています。

Main:(onCreate コードと onResume コードは同じです)

public class MainActivity extends Activity {

    TextView tv; 
    Button set;

    //CONST
    final static long MILLIS_IN_DAY = 86400000;
    final static long MILLIS_IN_HOUR = 3600000;
    final static long MILLIS_IN_MINUTE = 60000;
    long day, hour, minute;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textViewx);
        set = (Button) findViewById(R.id.setting);
        tv.setText("ONCREATE!");

        //LOAD DATA
        SharedPreferences prefs = getPreferences(MODE_PRIVATE);
        long loadedTime = prefs.getLong("quitDate", 0); //Load Settings Data
        boolean test = prefs.getBoolean("test", false);

        //get Comparison Data
        DateTime newDate = new DateTime();
        long updateTime = newDate.getMillis();
        long diffInMillis =  (updateTime-loadedTime);

        //Calculate
        minute = (diffInMillis/MILLIS_IN_MINUTE)%60;
        hour = (diffInMillis/MILLIS_IN_HOUR)%24;
        day = (diffInMillis/MILLIS_IN_DAY);

        tv.setText(""+Long.toString(loadedTime));
        if(test==true){
            tv.setText("" + "\nDay|Hour|Minute: " + Long.toString(day) +":" + Long.toString(hour) + ":" + Long.toString(minute));   
        }


        set.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Intent x = new Intent(MainActivity.this, Settings.class);
                startActivity(x);

            }
        });

設定:

import org.joda.time.DateTime;
import android.content.SharedPreferences;

public class Settings extends Activity implements View.OnClickListener {
    Button bAbout,bSettings,bFacebook;
    //(5000);
            final long MILLIS_IN_DAY = 86400000;
            final long MILLIS_IN_HOUR = 3600000;
            final long MILLIS_IN_MINUTE = 60000;
    //Variables
    long loadedTime;
    int packs;
    float cost;
    long day, hour, minute, second;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("Settings");
        setContentView(R.layout.activity_settings);
        setUpButtons();

        DateTime d1 = new DateTime(2013,9,11,0,0);

        long today = d1.getMillis();        

        //SAVE DATA
        SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
         editor.putLong("quitDate", today);
         editor.putBoolean("test", true);
         editor.commit();

        minute = (today/MILLIS_IN_MINUTE)%60;
        hour = (today/MILLIS_IN_HOUR)%24;
        day = (today/MILLIS_IN_DAY);

        TextView tv = (TextView) findViewById(R.id.TEMPDATE);
        TextView tv2 = (TextView) findViewById(R.id.todayis);
    tv2.setText("Today is: " + Long.toString(today));

    }
4

1 に答える 1

1

各アクティビティにプライベートな設定を使用しています。これは、MainActivity 用と Settings 用の 2 つの設定セットがあることを意味します。

関連するドキュメントのスニペットは次のとおりです。

アクティビティの永続状態はメソッド getPreferences(int) で管理され、アクティビティに関連付けられた名前と値のペアのセットを取得および変更できます。複数のアプリケーション コンポーネント (アクティビティ、レシーバー、サービス、プロバイダー) で共有される設定を使用するには、基になる Context.getSharedPreferences() メソッドを使用して、特定の名前で保存されている設定オブジェクトを取得できます。

http://developer.android.com/reference/android/app/Activity.html#getPreferences(int)

次のようなものを使用するか、getSharedPreferences("MY_PREFERENCES", MODE_PRIVATE)呼び出すだけでPreferenceManager.getDefaultSharedPreferences(Context context)、デフォルトの共有設定セットを取得できます。

于 2013-09-12T19:34:37.173 に答える