2

我正在尝试从 XML 中获取首选项,但不使用 PreferenceActivity。我只想在创建主要活动时从文件中加载并从首选项中获取一个值。但问题是吐司是空的(null?)。我有一个加载首选项的类。

这是Main Activity的onCreate方法

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

    Preferences prefs = new 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) 设置值的情况下祝酒“你好”。

你知道有什么问题吗?谢谢

4

2 回答 2

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, Context context) { try { Resources resources = context.getResources(); AssetManagerassetManager = 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 的位置。

为了使用它,您需要创建数据。您只需执行一次。或者更多,如果用户决定他有从设置 - > 应用程序中清理你的应用程序数据的冲动。

创建数据:

   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();
   }

对于将检查数据是否存在或用户是否删除它的机制,您可以使用简单的东西,例如如果配置了所有数据,则应该为 true 的附加变量。或者应该有一个来自appshared首选项的检查方法。

干杯!

于 2013-07-24T17:23:27.287 回答
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>
于 2013-12-10T09:45:09.443 回答