2016-12-15 43 views
-1

如何閱讀SharedPrefs?閱讀SharedPreferences

我SettingsActivity:

package com.deutz.obd2; 


import android.annotation.TargetApi; 
import android.content.Context; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Bundle; 
import android.preference.ListPreference; 
import android.preference.Preference; 
import android.preference.PreferenceActivity; 
import android.support.v7.app.ActionBar; 
import android.preference.PreferenceFragment; 
import android.preference.PreferenceManager; 
import android.preference.RingtonePreference; 
import android.text.TextUtils; 
import android.view.MenuItem; 

import java.util.List; 

/** 
* A {@link PreferenceActivity} that presents a set of application settings. On 
* handset devices, settings are presented as a single list. On tablets, 
* settings are split by category, with category headers shown to the left of 
* the list of settings. 
* <p> 
* See <a href="http://developer.android.com/design/patterns/settings.html"> 
* Android Design: Settings</a> for design guidelines and the <a 
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings 
* API Guide</a> for more information on developing a Settings UI. 
*/ 
public class SettingsActivity extends AppCompatPreferenceActivity { 
    /** 
    * A preference value change listener that updates the preference's summary 
    * to reflect its new value. 
    */ 
    private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object value) { 
      String stringValue = value.toString(); 

      if (preference instanceof ListPreference) { 
       // For list preferences, look up the correct display value in 
       // the preference's 'entries' list. 
       ListPreference listPreference = (ListPreference) preference; 
       int index = listPreference.findIndexOfValue(stringValue); 

       // Set the summary to reflect the new value. 
       preference.setSummary(
         index >= 0 
           ? listPreference.getEntries()[index] 
           : null); 

      } else { 
       // For all other preferences, set the summary to the value's 
       // simple string representation. 
       preference.setSummary(stringValue); 
      } 
      return true; 
     } 
    }; 

    /** 
    * Helper method to determine if the device has an extra-large screen. For 
    * example, 10" tablets are extra-large. 
    */ 
    private static boolean isXLargeTablet(Context context) { 
     return (context.getResources().getConfiguration().screenLayout 
       & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; 
    } 

    /** 
    * Binds a preference's summary to its value. More specifically, when the 
    * preference's value is changed, its summary (line of text below the 
    * preference title) is updated to reflect the value. The summary is also 
    * immediately updated upon calling this method. The exact display format is 
    * dependent on the type of preference. 
    * 
    * @see #sBindPreferenceSummaryToValueListener 
    */ 
    private static void bindPreferenceSummaryToValue(Preference preference) { 
     // Set the listener to watch for value changes. 
     preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); 

     // Trigger the listener immediately with the preference's 
     // current value. 
     sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, 
       PreferenceManager 
         .getDefaultSharedPreferences(preference.getContext()) 
         .getString(preference.getKey(), "")); 
    } 

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

     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsPreferenceFragment()).commit(); 
    } 

    /** 
    * Set up the {@link android.app.ActionBar}, if the API is available. 
    */ 
    private void setupActionBar() { 
     ActionBar actionBar = getSupportActionBar(); 
     if (actionBar != null) { 
      // Show the Up button in the action bar. 
      actionBar.setDisplayHomeAsUpEnabled(true); 
     } 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    public boolean onIsMultiPane() { 
     return isXLargeTablet(this); 
    } 

    /** 
    * {@inheritDoc} 
    */ 

    /** 
    * This method stops fragment injection in malicious applications. 
    * Make sure to deny any unknown fragments here. 
    */ 
    protected boolean isValidFragment(String fragmentName) { 
     return PreferenceFragment.class.getName().equals(fragmentName) 
       || SettingsPreferenceFragment.class.getName().equals(fragmentName); 
    } 

    /** 
    * This fragment shows general preferences only. It is used when the 
    * activity is showing a two-pane settings UI. 
    */ 
    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public static class SettingsPreferenceFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.pref_settings); 
      setHasOptionsMenu(true); 

      // Bind the summaries of EditText/List/Dialog/Ringtone preferences 
      // to their values. When their values change, their summaries are 
      // updated to reflect the new value, per the Android Design 
      // guidelines. 
      bindPreferenceSummaryToValue(findPreference("key_connection_type")); 
      bindPreferenceSummaryToValue(findPreference("key_server_ip")); 
      bindPreferenceSummaryToValue(findPreference("key_server_port")); 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      int id = item.getItemId(); 
      if (id == android.R.id.home) { 
       startActivity(new Intent(getActivity(), MainActivity.class)); 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 
    } 

} 

我PREF XML:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <ListPreference 
     android:defaultValue="1" 
     android:title="@string/pref_title_connection_type" 
     android:entries="@array/pref_sync_connection_type_titles" 
     android:entryValues="@array/pref_sync_connection_type_values" 
     android:key="key_connection_type" 
     android:negativeButtonText="@null" 
     android:positiveButtonText="@null" 
     android:summary="@string/pref_summary_connection_type" /> 
    <EditTextPreference 
     android:defaultValue="@string/pref_default_server_ip" 
     android:selectAllOnFocus="true" 
     android:singleLine="true" 
     android:title="@string/pref_title_server_ip" 
     android:key="key_server_ip" /> 
    <EditTextPreference 
     android:defaultValue="@string/pref_default_server_port" 
     android:selectAllOnFocus="true" 
     android:singleLine="true" 
     android:title="@string/pref_title_server_port" 
     android:key="key_server_port" /> 
</PreferenceScreen> 

我想讀兩個EditTextPrefs和ListPref其他類。該列表應該定義如何連接,並且EditText爲Wifi提供IP和端口。所以我有兩個TCP和藍牙類,我想使用TCP類中的IP和端口。

如何讀取已保存的首選項?請幫助

+0

的[我如何在Android上PreferenceActivity的SharedPreferences?](可能的複製http://stackoverflow.com/questions/2614719/how-do-i- get-the-sharedpreferences-from-a-preferenceactivity-in-android) –

回答

0

使用此

SharedPreference sharedPreference = PreferenceManager.getDefaultSharedPreferences(context); 
sharedPreference.getString("KEY_OF_WHAT_YOU_WANT","DEFAULT_VALUE"); 
+0

是的,上面的KEY_OF_WHAT_YOU_WANT是,比如說android:key =「key_server_ip」 –

+0

我得到'Can not resolve Method'和'Can not resolve Symbol' – mosambers

+0

你有通過上下文...我更新我的答案 –