C# (XF)只能从一个类调用API值
所以我得到了这些类(JsonData只是一些类,其中包含API中Json值的getter和setter): GetSetJsonData:C# (XF)只能从一个类调用API值,c#,json,api,xamarin,xamarin.forms,C#,Json,Api,Xamarin,Xamarin.forms,所以我得到了这些类(JsonData只是一些类,其中包含API中Json值的getter和setter): GetSetJsonData: class GetSetJsonData { HttpClient client; #region SuccesLogin JsonData.SuccesLogin.RootObject succesLogin; JsonData.SuccesLogin.Session session; JsonData.Succe
class GetSetJsonData
{
HttpClient client;
#region SuccesLogin
JsonData.SuccesLogin.RootObject succesLogin;
JsonData.SuccesLogin.Session session;
JsonData.SuccesLogin.Data2 data2;
JsonData.SuccesLogin test;
#endregion
#region CompanyData
JsonData.CompanyData.RootObject companyDataMatchPage;
JsonData.CompanyData.RootObject companyDataMyNetwork;
JsonData.CompanyData.RootObject companyDataAllCompanies;
#endregion
//uristrings for connecting
string uriLoginString = "url";
string uriGetCompanies = "url";
public string sessionString { get; set; }
public bool MakeConnection(string email, string password)
{
succesLogin = new JsonData.SuccesLogin.RootObject();
session = new JsonData.SuccesLogin.Session();
data2 = new JsonData.SuccesLogin.Data2();
var userdata = new JsonData.UserLogin.Login()
{
userdata = new JsonData.UserLogin.Userdata()
{
user_email = email,
user_password = password
}
};
var content = new StringContent(JsonConvert.SerializeObject(userdata), Encoding.UTF8, "application/json");
client = new HttpClient();
var response = client.PostAsync(uriLoginString, content).Result;
var responseString = response.Content.ReadAsStringAsync().Result;
succesLogin = JsonConvert.DeserializeObject<JsonData.SuccesLogin.RootObject>(responseString);
if (succesLogin.success == null)
{
return false;
}
else
{
session = succesLogin.success.data.session;
sessionString = JsonConvert.SerializeObject(session);
data2 = succesLogin.success.data.data;
return true;
}
//implement failure system
}
//testing only
public void Test()
{
sessionString = JsonConvert.SerializeObject(session);
}
}
当我从LoginPage调用MakeConnection时,我在GetSetJsonData类中获得了数据,一点问题也没有。现在,当我从LoginPage调用Test()或sessionString时,它仍然有效,但是当我尝试从任何其他类调用它时,由于某种原因,它只显示空值,即使我保存了它们。我似乎无法让它工作,我有点放弃了希望,有什么办法可以做到这一点吗?您正在LoginPage和其他页面中创建GetSetJsonData类作为一个新实例。在这种情况下,GetSetJsonData类以及类内的sessionString将仅在LoginPage内可用 如果要使sessionString在所有位置都可用,可以有几个选项:
公共静态类GetSetJsonData
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
public partial class App : Application
{
public GetSetJsonData GetSetJsonDataInstance { get; private set; }
public App()
{
InitializeComponent();
GetSetJsonDataInstance = new GetSetJsonData();
}
...
}
// Then you can access to the instance using:
((App)Application.Current).GetSetJsonDataInstance
如果看不到更多的代码,这是不可能的,但我怀疑在您的另一个页面中,您正在创建GetSetJsonData类的新实例,但希望它与同一类的其他实例具有相同的数据。这不是OOD的工作方式。如果你想共享一个类的一个实例,考虑一个单独的或静态的类。@杰森,这是一个单独的或静态的GETStJSONSORDATA类吗?@杰森,是的,我在其中创建了一个新类,它实际上是一个想法,但不知道如何修复它。
public partial class App : Application
{
public GetSetJsonData GetSetJsonDataInstance { get; private set; }
public App()
{
InitializeComponent();
GetSetJsonDataInstance = new GetSetJsonData();
}
...
}
// Then you can access to the instance using:
((App)Application.Current).GetSetJsonDataInstance