1 回答
TA貢獻(xiàn)1725條經(jīng)驗 獲得超8個贊
如果將Logins.txt文件更改為嵌入資源,則可以在運(yùn)行時從程序集中加載該資源,如下所示:
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(LoginPage)).Assembly;
Stream stream = assembly.GetManifestResourceStream("YourAssembly.Logins.txt");
string text = "";
using (var reader = new System.IO.StreamReader (stream))
{
text = reader.ReadToEnd();
}
YouAssembly指的是構(gòu)建項目時將生成的程序集 (dll) 的名稱。如果你不知道這是什么,或者沒有改變它,它可能與項目同名。
Xamarin 文檔有一個很好的例子來說明這是如何完成的:Xamarin.Forms 中的文件處理
編輯:
在構(gòu)造函數(shù)中執(zhí)行此操作并處理內(nèi)容以便您可以進(jìn)行身份驗證處理的更完整示例。
但首先,讓我們定義一個 POCO 來保存用戶名/密碼的詳細(xì)信息:
public class UserCredentials
{
public string Username {get;set;}
public string Password {get;set;}
}
添加一個屬性來保存這個類:
List<UserCredentials> CredentialList {get;set;}
現(xiàn)在,在構(gòu)造函數(shù)中:
public LoginPage()
{
InitializeComponent();
// Read in the content of the embedded resource, but let's read
// each line to make processing a little easier
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(LoginPage)).Assembly;
Stream stream = assembly.GetManifestResourceStream("YourAssembly.Logins.txt");
var textLines = new List<string>();
string line = null;
using (var reader = new System.IO.StreamReader (stream))
{
while ((line = sr.ReadLine()) != null)
{
textLines.Add(line);
}
}
// Init our cred list
this.CredentialList = new List<UserCredentials>();
// Read out the contents of the username/password combinations
foreach (var line in textLines)
{
// Grab items within new lines separated by a space and chuck them into their array
string[] components = line.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
// Add the combination to our list
this.CredentialList.Add(new UserCredential
{
Username = user.Add(components[0]),
Password = pass.Add(components[0])
});
}
}
現(xiàn)在我們的登錄變得容易多了。以前,我們首先檢查用戶名/密碼是否都存在于我們的已知數(shù)據(jù)集中,然后檢查它們在兩個列表中是否位于相同的索引處。
public void btnLogin_Clicked(object sender, EventArgs e)
{
// Now can use linq to validate the user
// NOTE: this is case sensitive
if (this.CredentialList.Any(a => a.Username == txtUsername.Text && a.Password == txtPassword.Text))
{
// NOTE: you've only validated the user here, but aren't passing
// or storing any detail of who the currently logged in user is
Navigation.PushModalAsync(new HomeScreen());
}
else
{
DisplayAlert("Error", "The username or password you have entered is incorrect", "Ok");
}
}
- 1 回答
- 0 關(guān)注
- 370 瀏覽
添加回答
舉報
