C# 应用程序级变量
我需要在登录时存储一些信息,这些信息可以在应用程序的其他活动中使用。我已经尝试创建一个单独的类:C# 应用程序级变量,c#,android,xamarin.android,C#,Android,Xamarin.android,我需要在登录时存储一些信息,这些信息可以在应用程序的其他活动中使用。我已经尝试创建一个单独的类: public class MyApp : Application { private string siteID; public string getSite() { return siteID; } public void setSite(string s) { siteID = s; } } 在我的登录活
public class MyApp : Application
{
private string siteID;
public string getSite()
{
return siteID;
}
public void setSite(string s)
{
siteID = s;
}
}
在我的登录活动中设置站点ID:
MyApp ma = new MyApp();
ma.setSite("IT-TEST");
MyApp ma = new MyApp();
var site = ma.getSite();
Toast.MakeText(this, site, ToastLength.Long)
.Show();
然后在以后的另一个活动中再次尝试获取该值:
MyApp ma = new MyApp();
ma.setSite("IT-TEST");
MyApp ma = new MyApp();
var site = ma.getSite();
Toast.MakeText(this, site, ToastLength.Long)
.Show();
但是这个部分总是返回空白。我缺少什么?因为您创建了一个新实例,其中站点为空。您需要存储“MyApp”对象的第一个实例才能恢复站点。您是否尝试过将类设置为静态?问题是您每次都实例化一个
MyApp
实例,因此没有数据持久性。在应用程序中共享数据的方法有很多,但这里有几种方法可以使用
存储简单键/值对的一个好方法是使用Android内置的偏好系统。在活动中,您可以执行以下操作:
var settings = PreferenceManager.GetDefaultSharedPreferences(ApplicationContext);
var editor = settings.Edit();
editor.PutString("key", "value");
editor.Commit();
var value = settings.GetString("key", null);
另一种方法是子类化应用程序
,它将在整个应用程序中充当全局应用程序类:
[Application]
public class MyApplication : Application
{
public static string StaticString { get; set; }
public string InstanceString { get; set; }
public MyApplication(IntPtr handle, JniHandleOwnership transfer)
: base(handle, transfer)
{
}
}
根据设计,这个类的一个实例将在整个应用程序中运行。通过将活动的应用程序属性强制转换到自定义类,可以从活动访问类上的实例数据:
var instanceValue = ((MyApplication) Application).InstanceString;
或者,如果静态属性更适合您的情况,也可以对类使用静态属性:
var staticValue = MyApplication.StaticString;
正如的答案中所述,子类化应用程序类在所有情况下都不会有帮助,因为在重新激活(从后台)后将创建一个新实例,其中变量将为null,而不是保存的状态
因此,在给定的首选项解决方案中保存状态是一个很好的解决方案。我还没有真正研究Monodroid,但搜索似乎表明这可能对您更有利:它确实存在于Monodroid上:谢谢。尝试你的第一个建议,但我一直得到“名称ApplicationContext在当前上下文中不存在”我应该放在那里什么?你从哪里调用它?如果调用类从上下文继承(活动和应用程序都继承)Nevermind,则也可以只传入“this”。用这个替换了ApplicationContext,它可以正常工作。谢谢