Store date with which an app is started

1

There is some way to store a date entered (when you start the app) and that with that date stored, every time you start the app it is not necessary to return it to enter. When entering that date, through Calendar, it performs operations (adds and removes days) in addition to daily counts of days left to arrive at the date entered. I tried it with SharedPreferences but it does not save anything for me.

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.en_salud.vencimiento.MainActivity">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Ingrese Fecha de Vencimiento"
            android:id="@+id/txtIngrese"
            android:visibility="visible"
            android:layout_marginTop="180dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/btnSelecFecha"
            android:visibility="visible"
            android:hint="seleccione la fecha"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="80dp"
            android:background="#afafaf"
            android:textColorHint="#fc0105"
            android:textStyle="italic" />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/txtDiasFaltan"
        android:text=""
        android:layout_alignParentStart="true"
        android:textSize="40dp"
        android:textStyle="bold"
        android:layout_marginTop="20sp" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/txtFechaVencimiento"
        android:visibility="invisible"
        android:layout_below="@+id/txtDiasFaltan"
        android:layout_alignParentStart="true"
        android:layout_marginTop="25dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/txtFecha7menos"
        android:visibility="invisible"
        android:layout_below="@+id/txtFechaVencimiento"
        android:layout_alignParentStart="true"
        android:layout_marginTop="25dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/txtFecha30mas"
        android:visibility="invisible"
        android:layout_below="@+id/txtFecha7menos"
        android:layout_alignParentStart="true"
        android:layout_marginTop="25dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:layout_gravity="center"
        android:text="GUARDAR"
        android:visibility="invisible"
        android:id="@+id/btnGuardar"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="@string/btn3"
        android:id="@id/btnReiniciar"
        android:visibility="invisible"
        android:layout_marginTop="50dp"
        android:layout_alignParentBottom="true"
         />
</RelativeLayout>
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    TextView txtDiasFaltan,txtIngrese,txtFechaVencimiento,txtFecha7menos,
            txtFecha30mas,btnSelecFecha,btnReiniciar;
    Button btnGuardar;
    SharedPreferences sf;
    public static final String preference = "pref";
    public static final String saveIt = "saveKey";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtDiasFaltan = (TextView) findViewById(R.id.txtDiasFaltan);
        txtIngrese = (TextView) findViewById(R.id.txtIngrese);
        txtFechaVencimiento = (TextView) findViewById(R.id.txtFechaVencimiento);
        txtFecha7menos = (TextView) findViewById(R.id.txtFecha7menos);
        txtFecha30mas = (TextView) findViewById(R.id.txtFecha30mas);
        btnSelecFecha = (TextView) findViewById(R.id.btnSelecFecha);
        btnReiniciar = (TextView) findViewById(R.id.btnReiniciar);
        btnGuardar = (Button)findViewById(R.id.btnGuardar);
        sf = getSharedPreferences(preference, Context.MODE_PRIVATE);

        if (sf.contains(saveIt)){
            txtDiasFaltan.setText(sf.getString(saveIt,""));
        }

        btnSelecFecha.setOnClickListener(this);
        btnGuardar.setOnClickListener(this);
        btnReiniciar.setOnClickListener(this);
        txtDiasFaltan.setVisibility(View.GONE);
        readSharedPreferences();

    }

    private void createSharedPreferences() {
        SharedPreferences.Editor editor = sf.edit();
        String dias = txtDiasFaltan.getText().toString();
        editor.putString(saveIt, dias);
        editor.commit();

    }

    private void readSharedPreferences() {
        sf =getSharedPreferences(preference, Context.MODE_PRIVATE);
        txtDiasFaltan = (TextView)findViewById(R.id.txtDiasFaltan);
        if (sf.contains(saveIt)){
            txtDiasFaltan.setText(sf.getString(saveIt,""));
        }

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){

            case R.id.btnSelecFecha:
                DialogFragment picker = new DatePickerFragment();
                picker.show(getFragmentManager(), "datePicker");
                break;

            case R.id.btnReiniciar:
                super.recreate();
                break;

            case R.id.btnGuardar:
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
                alertDialogBuilder.setTitle("GUARDAR FECHA");
                alertDialogBuilder
                        .setMessage("Confirma la fecha")
                        .setCancelable(false)
                        .setPositiveButton("Si",new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {
                                //btnReiniciar.setVisibility(View.VISIBLE);
                                btnGuardar.setVisibility(View.GONE);
                                //onPause();
                                createSharedPreferences ();
                                readSharedPreferences ();
                            }
                        })
                        .setNegativeButton("CANCELAR",new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {
                                dialog.cancel();
                            }
                        });
                AlertDialog alertDialog = alertDialogBuilder.create();
                alertDialog.show();
        }
    }
}


    public class DatePickerFragment extends android.app.DialogFragment implements DatePickerDialog.OnDateSetListener{

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState){
        final Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dpd = new DatePickerDialog(getActivity(), this, year, month, day);
        return  dpd;
    }

    public void onDateSet(DatePicker view, int year, int month, int day){
        TextView txtDiasFaltan = (TextView) getActivity().findViewById(R.id.txtDiasFaltan);
        TextView txtFechaVencimiento = (TextView) getActivity().findViewById(R.id.txtFechaVencimiento);
        TextView txtFecha7menos = (TextView) getActivity().findViewById(R.id.txtFecha7menos);
        TextView txtFecha30mas = (TextView) getActivity().findViewById(R.id.txtFecha30mas);


        SimpleDateFormat df = new SimpleDateFormat("EE  dd/MM/yyyy");
        long date1 = System.currentTimeMillis();
        Calendar cal = Calendar.getInstance();
        cal.set(year, month, day, 0, 0, 0);

        long Date2 = cal.getTimeInMillis();
        txtFechaVencimiento.setText("Vence el día:         " + df.format(cal.getTime()));

        cal.add(Calendar.DATE, -7);
        txtFecha7menos.setText("7 días previos:       " + df.format(cal.getTime()));

        cal.set(year, month, day, 0, 0, 0);
        cal.add(Calendar.DATE, 30);
        txtFecha30mas.setText("30 días despues:     " + df.format(cal.getTime()));


            long diffInMilis = Date2 - date1;
            long diffInDays = diffInMilis / (24 * 60 * 60 * 1000);
            //long diffInWeeks = diffInMilis / (7 * 24 * 60 * 60 * 1000);

            txtDiasFaltan.setText("faltan "+ diffInDays + " días");

        textViewVisible();

    }
    private void textViewVisible() {
        getActivity().findViewById(R.id.txtIngrese).setVisibility(View.GONE);
        getActivity().findViewById(R.id.btnSelecFecha).setVisibility(View.GONE);
        getActivity().findViewById(R.id.txtDiasFaltan).setVisibility(View.VISIBLE);
        getActivity().findViewById(R.id.txtFechaVencimiento).setVisibility(View.VISIBLE);
        getActivity().findViewById(R.id.txtFecha7menos).setVisibility(View.VISIBLE);
        getActivity().findViewById(R.id.txtFecha30mas).setVisibility(View.VISIBLE);
        getActivity().findViewById(R.id.btnGuardar).setVisibility(View.VISIBLE);
        getActivity().findViewById(R.id.btnReiniciar).setVisibility(View.VISIBLE);
    }

}
    
asked by armen 22.08.2016 в 04:56
source

1 answer

1

Armen, does not save anything since you are not defining what the preference name is, when using getSharedPreferences () at the time of saving and get the preference must be by the name of the same, this would be the correction:

private void createSharedPreferences() {
    sf = getSharedPreferences(preference, MODE_PRIVATE);
    SharedPreferences.Editor editor = sf.edit();
    String dias = txtDiasFaltan.getText().toString();
    editor.putString(saveIt, dias);
    editor.commit();
}

more information: Save and get a value using getSharedPreferences ()

Update:

I have reviewed your code and in a preference you can not search for the "key" using the contains() method since it is not a String, your validation did not allow you to access the value in the preference.

private void readSharedPreferences() {
        sf =getSharedPreferences(preference, Context.MODE_PRIVATE);
        txtDiasFaltan = (TextView)findViewById(R.id.txtDiasFaltan);
        //if(sf.contains(saveIt)){
            txtDiasFaltan.setText(sf.getString(saveIt,""));
        //}

    }

If you want validation you can do it this way:

 if(sf.getString(saveIt,"") != null && !sf.getString(saveIt,"").isEmpty()){
       txtDiasFaltan.setText(sf.getString(saveIt,""));
 }
    
answered by 22.08.2016 в 05:33