簡體   English   中英

如何在微調器中共享首選項?

[英]How sharedPreferences in a spinner?

如何在下一個代碼中在微調器上使用 sharedPreferences ,我嘗試這樣做:

txtWebsite.setText(sharedPreferences.getString("defaultUploadWebsite", defaultUploadWebsite));

我試過這個:

spinner.setSelection(sharedPreferences.getString("userName", ""));

但它不適用於共享偏好。 這是一個活動主代碼,此代碼發送數據以更新 MySQL BD。

     package com.websmithing.gpstracker;

    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.os.SystemClock;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.View;
    import android.view.inputmethod.EditorInfo;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioGroup;
    import android.widget.Toast;

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GooglePlayServicesUtil;

    import java.util.UUID;

    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.TextView;

    import com.android.volley.RequestQueue;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.toolbox.StringRequest;
    import com.android.volley.toolbox.Volley;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import java.util.ArrayList;

    public class GpsTrackerActivity extends AppCompatActivity {

        public static final String EmployeeNamearray = "EmpName";
        public static final String EmployeeName  = "EmpName";
        public static final String EmployeeMailid = "EmpMailid";
        public static final String JSON_ARRAY = "result";
        private JSONArray result;
        Spinner spinner;
        String EmpName;
        private ArrayList<String> arrayList;
        TextView employeename,mailid;

        private static final String TAG = "GpsTrackerActivity";

        // use the websmithing defaultUploadWebsite for testing and then check your
        // location with your browser here: https://www.websmithing.com/gpstracker/displaymap.php
        private String defaultUploadWebsite;

        private EditText txtUserName;
        private Spinner spnrEmployee;
        private EditText txtWebsite;
        private Button trackingButton;

        private boolean currentlyTracking;
        private RadioGroup intervalRadioGroup;
        private int intervalInMinutes = 1;
        private AlarmManager alarmManager;
        private Intent gpsTrackerIntent;
        private PendingIntent pendingIntent;


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

            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setLogo(R.mipmap.ic_launcher);
            getSupportActionBar().setDisplayUseLogoEnabled(true);

            defaultUploadWebsite = getString(R.string.default_upload_website);

            txtWebsite = (EditText)findViewById(R.id.txtWebsite);
            txtUserName = (EditText)findViewById(R.id.txtUserName);
            spnrEmployee = (Spinner)findViewById(R.id.spnrEmployee);
            intervalRadioGroup = (RadioGroup)findViewById(R.id.intervalRadioGroup);
            trackingButton = (Button)findViewById(R.id.trackingButton);
            txtUserName.setImeOptions(EditorInfo.IME_ACTION_DONE);

            SharedPreferences sharedPreferences = this.getSharedPreferences("com.websmithing.gpstracker.prefs", Context.MODE_PRIVATE);
            currentlyTracking = sharedPreferences.getBoolean("currentlyTracking", false);

            boolean firstTimeLoadingApp = sharedPreferences.getBoolean("firstTimeLoadingApp", true);
            if (firstTimeLoadingApp) {
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putBoolean("firstTimeLoadingApp", false);
                editor.putString("appID",  UUID.randomUUID().toString());
                editor.apply();
            }


            intervalRadioGroup.setOnCheckedChangeListener(
                    new RadioGroup.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(RadioGroup radioGroup, int i) {
                            saveInterval();
                        }
                    });

            trackingButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    trackLocation(view);
                }
            });


            //SAAG
            spinner= (Spinner) findViewById(R.id.spnrEmployee);
            employeename= (TextView) findViewById(R.id.tvName);
            mailid= (TextView) findViewById(R.id.tvmailid);
            arrayList = new ArrayList<String>();
            getdata();
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    //Setting the values to textviews for a selected item
                    employeename.setText("Name: "+getemployeeName(position));
                    mailid.setText("Mail Id: "+getmailid(position));

                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    employeename.setText("");
                    mailid.setText("");
                }
            });


        }


        private void getdata() {
            StringRequest stringRequest = new StringRequest("http://190.147.68.37/ejemplos/datos.php",
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            JSONObject j = null;
                            try {
                                j = new JSONObject(response);
                                result = j.getJSONArray(JSON_ARRAY);
                                empdetails(result);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {

                        }
                    });
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
        }
        private void empdetails(JSONArray j) {

            for (int i = 0; i < j.length(); i++) {
                try {
                    JSONObject json = j.getJSONObject(i);
                    arrayList.add(json.getString(EmployeeNamearray));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            // arrayList.add(0,"Select Employee");

            spinner.setAdapter(new ArrayAdapter<String>(GpsTrackerActivity.this, android.R.layout.simple_spinner_dropdown_item, arrayList));

        }
        //Method to get student name of a particular position
        private String getemployeeName(int position){
            String name="";
            try {
                //Getting object of given index
                JSONObject json = result.getJSONObject(position);

                //Fetching name from that object
                name = json.getString( EmployeeName);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            //Returning the name
            return name;
        }

        //Doing the same with this method as we did with getName()
        private String getmailid(int position){
            String mailid="";
            try {
                JSONObject json = result.getJSONObject(position);
                mailid = json.getString( EmployeeMailid);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return mailid;
        }


        private void saveInterval() {
            if (currentlyTracking) {
                Toast.makeText(getApplicationContext(), R.string.user_needs_to_restart_tracking, Toast.LENGTH_LONG).show();
            }

            SharedPreferences sharedPreferences = this.getSharedPreferences("com.websmithing.gpstracker.prefs", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();

            switch (intervalRadioGroup.getCheckedRadioButtonId()) {
                case R.id.i1:
                    editor.putInt("intervalInMinutes", 1);
                    break;
                case R.id.i5:
                    editor.putInt("intervalInMinutes", 5);
                    break;
                case R.id.i15:
                    editor.putInt("intervalInMinutes", 15);
                    break;
            }

            editor.apply();
        }


        private void startAlarmManager() {
            Log.d(TAG, "startAlarmManager");

            Context context = getBaseContext();
            alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
            gpsTrackerIntent = new Intent(context, GpsTrackerAlarmReceiver.class);
            pendingIntent = PendingIntent.getBroadcast(context, 0, gpsTrackerIntent, 0);

            SharedPreferences sharedPreferences = this.getSharedPreferences("com.websmithing.gpstracker.prefs", Context.MODE_PRIVATE);
            intervalInMinutes = sharedPreferences.getInt("intervalInMinutes", 1);

            alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                    SystemClock.elapsedRealtime(),
                    intervalInMinutes * 60000, // 60000 = 1 minute
                    pendingIntent);
        }

        private void cancelAlarmManager() {
            Log.d(TAG, "cancelAlarmManager");

            Context context = getBaseContext();
            Intent gpsTrackerIntent = new Intent(context, GpsTrackerAlarmReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, gpsTrackerIntent, 0);
            AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(pendingIntent);
        }

        // called when trackingButton is tapped
        protected void trackLocation(View v) {
            SharedPreferences sharedPreferences = this.getSharedPreferences("com.websmithing.gpstracker.prefs", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();

            if (!saveUserSettings()) {
                return;
            }

            if (!checkIfGooglePlayEnabled()) {
                return;
            }

            if (currentlyTracking) {
                cancelAlarmManager();

                currentlyTracking = false;
                editor.putBoolean("currentlyTracking", false);
                editor.putString("sessionID", "");
            } else {
                startAlarmManager();

                currentlyTracking = true;
                editor.putBoolean("currentlyTracking", true);
                editor.putFloat("totalDistanceInMeters", 0f);
                editor.putBoolean("firstTimeGettingPosition", true);
                editor.putString("sessionID",  UUID.randomUUID().toString());
            }

            editor.apply();
            setTrackingButtonState();
        }

        private boolean saveUserSettings() {
            if (textFieldsAreEmptyOrHaveSpaces()) {
                return false;
            }

            SharedPreferences sharedPreferences = this.getSharedPreferences("com.websmithing.gpstracker.prefs", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();

            switch (intervalRadioGroup.getCheckedRadioButtonId()) {
                case R.id.i1:
                    editor.putInt("intervalInMinutes", 1);
                    break;
                case R.id.i5:
                    editor.putInt("intervalInMinutes", 5);
                    break;
                case R.id.i15:
                    editor.putInt("intervalInMinutes", 15);
                    break;
            }

            //editor.putString("userName", txtUserName.getText().toString().trim());
            editor.putString("userName", spnrEmployee.getSelectedItem().toString().trim());
            editor.putString("defaultUploadWebsite", txtWebsite.getText().toString().trim());

            editor.apply();

            return true;
        }

        private boolean textFieldsAreEmptyOrHaveSpaces() {
            String tempUserName = txtUserName.getText().toString().trim();
            String tempWebsite = txtWebsite.getText().toString().trim();

            if (tempWebsite.length() == 0 || hasSpaces(tempWebsite) || tempUserName.length() == 0 || hasSpaces(tempUserName)) {
                Toast.makeText(this, R.string.textfields_empty_or_spaces, Toast.LENGTH_LONG).show();
                return true;
            }

            return false;
        }

        private boolean hasSpaces(String str) {
            return ((str.split(" ").length > 1) ? true : false);
        }

        private void displayUserSettings() {
            SharedPreferences sharedPreferences = this.getSharedPreferences("com.websmithing.gpstracker.prefs", Context.MODE_PRIVATE);
            intervalInMinutes = sharedPreferences.getInt("intervalInMinutes", 1);

            switch (intervalInMinutes) {
                case 1:
                    intervalRadioGroup.check(R.id.i1);
                    break;
                case 5:
                    intervalRadioGroup.check(R.id.i5);
                    break;
                case 15:
                    intervalRadioGroup.check(R.id.i15);
                    break;
            }

                txtWebsite.setText(sharedPreferences.getString("defaultUploadWebsite", defaultUploadWebsite));

        //this line for modify and sharepreferences
                spinner.setSelection(sharedPreferences.getString("userName", ""));


}

    private boolean checkIfGooglePlayEnabled() {
        if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS) {
            return true;
        } else {
            Log.e(TAG, "unable to connect to google play services.");
            Toast.makeText(getApplicationContext(), R.string.google_play_services_unavailable, Toast.LENGTH_LONG).show();
            return false;
        }
    }

    private void setTrackingButtonState() {
        if (currentlyTracking) {
            trackingButton.setBackgroundResource(R.drawable.green_tracking_button);
            trackingButton.setTextColor(Color.BLACK);
            trackingButton.setText(R.string.tracking_is_on);
        } else {
            trackingButton.setBackgroundResource(R.drawable.red_tracking_button);
            trackingButton.setTextColor(Color.WHITE);
            trackingButton.setText(R.string.tracking_is_off);
        }
    }

在此處保存微調器的當前位置:

 private boolean saveUserSettings() {
        if (textFieldsAreEmptyOrHaveSpaces()) {
            return false;
        }

        SharedPreferences sharedPreferences = this.getSharedPreferences("com.websmithing.gpstracker.prefs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        switch (intervalRadioGroup.getCheckedRadioButtonId()) {
            case R.id.i1:
                editor.putInt("intervalInMinutes", 1);
                break;
            case R.id.i5:
                editor.putInt("intervalInMinutes", 5);
                break;
            case R.id.i15:
                editor.putInt("intervalInMinutes", 15);
                break;
        }

        //editor.putString("userName", txtUserName.getText().toString().trim());
        editor.putString("userName", spnrEmployee.getSelectedItem().toString().trim());
        editor.putString("defaultUploadWebsite", txtWebsite.getText().toString().trim());
        editor.putInt("position", spnrEmployee.getSelectedItemPosition());
        editor.apply();

        return true;
    }

然后,當您想顯示存儲的值時,只需使用以下命令:

 private void displayUserSettings() {
            SharedPreferences sharedPreferences = this.getSharedPreferences("com.websmithing.gpstracker.prefs", Context.MODE_PRIVATE);
            intervalInMinutes = sharedPreferences.getInt("intervalInMinutes", 1);

            switch (intervalInMinutes) {
                case 1:
                    intervalRadioGroup.check(R.id.i1);
                    break;
                case 5:
                    intervalRadioGroup.check(R.id.i5);
                    break;
                case 15:
                    intervalRadioGroup.check(R.id.i15);
                    break;
            }

                txtWebsite.setText(sharedPreferences.getString("defaultUploadWebsite", defaultUploadWebsite));

        //this line for modify and sharepreferences
                spinner.setSelection(sharedPreferences.getInt("position",0));


}

不要忘記,在將適配器數據設置為微調器后,您應該調用此方法: displayUserSettings

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM