Android传递Context到处都是

时间:2015-04-09 19:56:51

标签: java android android-context

我开发了一个Android应用程序(对我而言)它太丑了,我很确定我的方法是非常错误的。

我有一堆片段活动和许多类,如异步任务,业务规则等。特别是,我有一个名为PropertiesReader的类,我用它来读取属性文件。我在很多地方使用这个类,比如片段和业务规则。

public class PropertyReader {

    private Properties properties;

    public PropertyReader(Context context){
        super();
        try {
            properties = new Properties();
            properties.load(context.getResources().getAssets().open("badass.properties"));
        } catch (IOException e){
            Log.e("Error", "Error opening properties file", e);
        }
    }

    public String getValue(String key){
        return properties.getProperty(key);
    }
}

在我使用这门课的每个地方,我都会这样做:

 PropertyReader bla = new PropertyReader(this); //or new PropertyReader(context);

我想知道处理需要构建Context的类的最佳方法是什么。在我看来,每个构造函数都有一个Context参数非常难看。

有什么想法吗?

提前感谢。

1 个答案:

答案 0 :(得分:5)

创建一个单例,并在创建时保存应用程序上下文。

它看起来像这样:

public class PropertyReader {

    private static PropertyReader ourInstance = new PropertyReader();
    private Context mContext;

    public static PropertyReader getInstance() {
         return ourInstance;
    }

    private PropertyReader() {
    }

    public void loadProperties(Context context) {
         mContext = context;
         try {
             properties = new Properties();
             properties.load(context.getResources().getAssets().open("badass.properties"));
         } catch (IOException e){
             Log.e("Error", "Error opening properties file", e);
         }
    }

}

当您启动应用程序时,您可以执行以下操作:

PropertyReader.getInstance().loadProperties(getApplicationContext());

然后你可以在其他地方访问你的PropertyReader:

PropertyReader.getInstance().getValue(key);