[英]How to get activity context into a non-activity class android?
我有一个Activity类,我将一些信息传递给一个帮助类(非活动)类。 在helper类中,我想使用getSharedPreferences()
。 但我无法使用它,因为它需要活动上下文。
这是我的代码:
class myActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
Info = new Authenticate().execute(ContentString).get();
ItemsStore.SetItems(Info);
}
}
class ItemsStore
{
public void SetItems(Information info)
{
SharedPreferences localSettings = mContext.getSharedPreferences("FileName", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = localSettings.edit();
editor.putString("Url", info.Url);
editor.putString("Email", info.Email);
}
}
不知道如何实现这一目标?
您可以尝试此解决方案而不是创建内存泄漏(通过在类字段中保存活动上下文),因为共享首选项不需要活动上下文但是...任何上下文:)对于长生活对象,您应该使用ApplicationContext。
public class MySuperAppApplication extends Application {
private static Application instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static Context getContext() {
return instance.getApplicationContext();
}
}
<application
...
android:name=".MySuperAppApplication" >
...
</application>
public void persistItems(Information info) {
Context context = MySuperAppApplication.getContext();
SharedPreferences sharedPreferences = context.getSharedPreferences("urlPersistencePreferences", Context.MODE_PRIVATE);
sharedPreferences.edit()
.putString("Url", info.Url)
.putString("Email", info.Email);
}
方法签名以这种方式看起来更好,因为它不需要外部上下文。 这可以隐藏在某些界面下。 您也可以轻松地使用它来进行依赖注入。
HTH
尝试这个:
class myActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
Info = new Authenticate().execute(ContentString).get();
ItemsStore.SetItems(Info, getApplicationContext());
}
}
class ItemsStore
{
public void SetItems(Information info, Context mContext)
{
SharedPreferences localSettings = mContext.getSharedPreferences("FileName",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = localSettings.edit();
editor.putString("Url", info.Url);
editor.putString("Email", info.Email);
}
}
您需要将上下文传递给非活动类的构造函数
ItemsStore itemstore = new ItemStore(myActivity.this);
itemstore.SetItems(Info);
然后
Context mContext;
public ItemsStore (Context context)
{
mContext =context;
}
现在mContext
可以用作活动上下文。
注意:不要保留对上下文活动的长期引用(对活动的引用应该与活动本身具有相同的生命周期)
在您的活动中编写公共功能。 在Activity类中创建辅助类的实例时,在构造函数中传递活动的上下文。
然后从助手类中使用activity上下文,在activity类中调用public函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.