如何从静态类

时间:2017-01-29 20:37:29

标签: java android sharedpreferences

我的偏好保存在我的xml文件R.xml.my_prefs:

<EditTextPreference
    android:key="host"
    android:text="www.whatever.com" />

我想从静态类中读取它:

public class NetworkUtils{

    private string PREFERENCE = functionIWouldLikeToHaveToLoadPreferences(R.xml.my_prefs).get("host");  // <--- NO WAY!!!

    private static final String USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";

    private static URL buildURL(String path) throws MalformedURLException{
        return buildURL(path, new HashMap<String, String>());
    }

    private static URL buildURL(String path, HashMap<String, String> getArgs) throws MalformedURLException{
        Uri.Builder builder = new Uri.Builder();
        builder.scheme("https");

        builder.authority(PREFERENCE);
        builder.appendPath("22");
        builder.appendPath(path);

        for (Map.Entry<String, String> entry : getArgs.entrySet()) {
            builder.appendQueryParameter(entry.getKey(), entry.getValue());
        }

        Uri uri = builder.build();
        URL url = new URL(uri.toString());
        return url;
    }

但看起来我无法从这个课程中获得PREFERENCE,我需要一个活动。没有活动背景的任何方式吗?

该类上有许多静态函数会使用PREFERENCE和其他类似的函数,因此我希望避免不得不一次又一次地将上下文传递给每一个,因为它会让我的生活变得更加复杂。我该怎么办?

1 个答案:

答案 0 :(得分:1)

我理解您希望避免将Context对象传递给每个静态成员。但这是在Android中处理系统相关人员的首选方式。

如果您有Application课程的孩子,则可以使用NetworkUtils Context方法初始化Application.onCreate。但请记住在相应的Application.onTerminate方法中发布对全局上下文的引用。

我仍然坚持认为保留Context对象并不是一个好主意。

您是否曾考虑使用之前已读取的NetworkUtils对象初始化PREFERENCE类,该对象来自可以访问Context值的某个地方。