我正在尝试从XML获取首选项但不使用PreferenceActivity。 我只想在创建Main活动时从文件加载并从首选项中提取值。但问题是toast是空的(null?)。我有一个加载首选项的类。
以下是主要活动的onCreate方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Preferences prefs = new Preferences();
}
Preferences类(只有构造函数......)
public Preferences(Context context) {
PreferenceManager.setDefaultValues(context, "MyPrefs", 0, R.xml.preferences, false);
SharedPreferences sharedPreferences = context.getSharedPreferences("MyPrefs", 0);
Editor editor = sharedPreferences.edit();
String myValue = sharedPreferences.getString("myKey", null); // I don't know if null is OK
Toast.makeText(context.getApplicationContext(), myValue, Toast.LENGTH_SHORT).show();
}
和XML文件
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<Preference android:key="myKey" android:defaultValue="hello" />
</PreferenceScreen>
我第一次启动应用时,我希望设置默认值。所以在这里我希望应用程序在我没有使用editor.putString(key,value)设置值的情况下干杯“你好”。
你知道可能出现什么问题吗? 感谢
答案 0 :(得分:1)
你是用java编程的。通过太阳会议,我认为你有义务使用config.propeties文件。
我将提供一个快速而完整的教程,让您了解此事。我真的建议你使用这种方法,因为大多数程序员都喜欢这样。
我将为您提供如何制作此文件的快速教程。把它放在哪里。以及如何从中获取数据。
开始。
将文件config.properties放入assets文件夹:
config.properties的示例
domain=@domain.com.pl
errorTextColor=\#FF0000
serverPort=1234
如何从config.properties
访问和检索数据的方法public static String getConfigurationPropertiesValue(String value, 上下文上下文){ 尝试{ Resources resources = context.getResources(); AssetManager assetManager = resources.getAssets();
try {
InputStream inputStream = assetManager.open("config.properties");
Properties properties = new Properties();
properties.load(inputStream);
return properties.getProperty(value);
} catch (IOException e) {
Log.e("getConfigurationPropertiesValue",
"Failed to open config property file");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
文献: http://en.wikipedia.org/wiki/.properties http://www.mkyong.com/java/java-properties-file-examples/
修改强>
您还可以使用sharedPreferences对数据进行更多控制,例如添加数据/删除数据/更新数据。 SharedPreferences更像是一个android的SQLite数据库,有一个很好的api可供使用,所以你真的不需要知道数据库或SQL的位置。
要使用它,您需要创建数据。你只需要这样做一次。 或者更多,如果用户决定他有从设置中清除应用数据的冲动 - &gt;应用强>
创建数据:
public static void create(Context cw) {
SharedPreferences sharedPreferences = cw.getSharedPreferences(
ANDROID_MESSENGER, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("isRegistered", false);
editor.putString("phoneNumber", null);
editor.putString("callingCode", null);
String uuid = UUID.randomUUID().toString();
editor.putString("token", uuid);
editor.putBoolean("internetOnly", false);
editor.putBoolean("logToDev", true);
editor.putBoolean("dataTransfer", true);
Log.i("create", "Generating Token: " + uuid);
editor.commit();
}
访问现有数据:
public static String getToken(Context cw) {
SharedPreferences sharedPreferences = cw.getSharedPreferences(
ANDROID_MESSENGER, Activity.MODE_PRIVATE);
return sharedPreferences.getString("token", null);
}
更新数据:
public static void setPhoneNumber(Context cw, String phoneNumber) {
SharedPreferences sharedPreferences = cw.getSharedPreferences(
ANDROID_MESSENGER, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("phoneNumber", phoneNumber);
editor.commit();
}
对于检查数据是否存在或用户是否删除它的机制,您可以使用简单的其他变量,如果配置了所有数据,则应该为真。或者应该有一个来自appshared首选项的检查方法。
干杯!
答案 1 :(得分:0)
我试了很久,找到了解决方案:-) 只是一个“偏好”不被android识别。虽然我不知道为什么。
如果您将其更改为“EditTextPreference”或“CheckboxPreference”之类的任何标记,则其工作正常。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<EditTextPreference android:key="CLIENT_HOMESCREEN_TITLE"
android:defaultValue="Home Screen"/>
<EditTextPreference android:key="CLIENT_ADMIN_BUTTON"
android:defaultValue="Admin"/>
<EditTextPreference android:key="CLIENT_PLAYER_BUTTON"
android:defaultValue="Player"/>
<EditTextPreference android:key="CLIENT_SAVE_BUTTON"
android:defaultValue="Save"/>
<EditTextPreference android:key="CLIENT_CANCEL_BUTTON"
android:defaultValue="Cancel"/>
<EditTextPreference android:key="CLIENT_SERVER_SETUP_IP"
android:defaultValue="IP:"/>
<EditTextPreference android:key="CLIENT_SERVER_SETUP_PORT"
android:defaultValue="Port:"/>
<EditTextPreference android:key="CLIENT_SERVER_SETUP_TITLE"
android:defaultValue="Server Setup"/>
</PreferenceScreen>