登录Xamarin Android后显示用户信息

时间:2017-03-09 08:09:53

标签: android database xamarin login

我有一个登录系统,用户必须注册并可以在注册帐户后登录。我想要做的是在成功登录后将用户信息显示为新的.axml。任何帮助将不胜感激。代码如下所示。

MainActivity.cs

   using Android.App;
   using Android.Widget;
   using Android.OS;
   using Android.Gms.Ads;
   using SQLite;
   using System.IO;
   using System;

   namespace LogInApplication
   {
[Activity(Label = "Log In Application", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{

    protected AdView mAdView;
    private InterstitialAd interstitialAds = null;


    EditText txtusername;
    EditText txtPassword;
    Button btncreate;
    Button btnsign;
    Button btnedit;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);
        // Get our button from the layout resource,
        // and attach an event to it

        interstitialAds = new InterstitialAd(this);
        mAdView = FindViewById<AdView>(Resource.Id.adView);
        var adRequest = new AdRequest.Builder().Build();
        mAdView.LoadAd(adRequest);
        //setting unit id for interstitial ad
        interstitialAds.AdUnitId = "ca - app - pub - 3113453000644941 / 8764416112";
        //loading test ad using adrequest
        interstitialAds.LoadAd(adRequest);

        interstitialAds.AdListener = new AdListener(this);



        btnsign = FindViewById<Button>(Resource.Id.btnlogin);
        btncreate = FindViewById<Button>(Resource.Id.btnregister);
        btnedit = FindViewById<Button>(Resource.Id.btnforgot);
        txtusername = FindViewById<EditText>(Resource.Id.txtusername);
        txtPassword = FindViewById<EditText>(Resource.Id.txtpwd);
        btnsign.Click += Btnsign_Click;
        btncreate.Click += Btncreate_Click;
        btnedit.Click += Btnedit_Click;
        CreateDB();
    }


    class AdListener : Android.Gms.Ads.AdListener
    {
        MainActivity main;

        public AdListener(MainActivity innerMain)
        {
            main = innerMain;
        }

        public override void OnAdLoaded()
        {
            base.OnAdLoaded();
            main.interstitialAds.Show();
        }
    }



    private void Btncreate_Click(object sender, EventArgs e)
    {
        StartActivity(typeof(RegisterActivity));
    }

    private void Btnedit_Click(object sender, EventArgs e)
    {
        StartActivity(typeof(ForgotActivity));
    }

    private void Btnsign_Click(object sender, EventArgs e)
    {
        try
        {
            string dpPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "user.db3"); //Call Database
            var db = new SQLiteConnection(dpPath);
            var data = db.Table<LoginTable>(); //Call Table
            var data1 = data.Where(x => x.username == txtusername.Text && x.password == txtPassword.Text).FirstOrDefault(); //Linq Query
            if (data1 != null)
            {
                Toast.MakeText(this, "Login Success", ToastLength.Short).Show();
                StartActivity(typeof(WelcomeActivity));
            }
            else
            {
                Toast.MakeText(this, "Username or Password invalid", ToastLength.Short).Show();
            }
        }
        catch (Exception ex)
        {
            Toast.MakeText(this, ex.ToString(), ToastLength.Short).Show();
        }
    }
    public string CreateDB()
    {
        var output = "";
        output += "Creating Database if it doesn't exits";
        string dpPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "user.db3"); //Create New Database
        var db = new SQLiteConnection(dpPath);
        output += "\n Database Created.....";
        return output;
    }
}
   }

Main.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/darker_gray"
    android:weightSum="100"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text="LOGIN"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@android:color/black"
        android:textSize="25sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:id="@+id/textView1" />
    <EditText
        android:id="@+id/txtusername"
        android:layout_width="fill_parent"
        android:textColorHint="@android:color/black"
        android:hint="Username"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/txtpwd"
        android:layout_width="fill_parent"
        android:textColorHint="@android:color/black"
        android:hint="Password"
        android:inputType="textPassword"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btnlogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/ButtonLogInStyle"
        android:textSize="20sp"
        android:text="Log In"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="20dp" />
    <Button
        android:id="@+id/btnforgot"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/ButtonLogInStyle"
        android:textSize="15sp"
        android:text="Forgot Password?"
        android:layout_marginLeft="60dp"
        android:layout_marginRight="60dp"
        android:layout_marginBottom="20dp" />
    <Button
        android:id="@+id/btnregister"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/ButtonSignUpStyle"
        android:textSize="20sp"
        android:text="Register"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="170dp" />
    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544/6300978111" />
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

如果您想在用户登录后显示详细信息,您可以执行的操作是创建Services文件夹并在其中创建静态类GlobalVars.cs。它将用于放置您将使用的任何全局变量。在您的情况下,它将是Username(在登录成功后将其设置),然后您可以在需要时再次从数据库中检索数据,或者创建一个User类并将所有用户的详细信息放入其中。当您需要存储在GlobalVars.cs中的变量时,您只需拨打Services.GlobalVars.variableName

即可

为了让您了解这种方法,我将附上包含GlobalVars.cs变量的User示例。

/Services/GlobalVars.cs

public static class GlobalVars
{
    public static User UserDetail;
    ... //other variables needed
}

AnotherActivity.cs

var DetailFromLogin = Services.GlobalVars.UserDetail;

或者

using Services;
...
//calling the variable 
var DetailFromLogin = GlobalVars.UserDetail;

当然,通过使用此方法,您无法在应用关闭后保存登录凭据(因为它使用本地变量来存储它)。如果您希望在用户登录并执行检查后保存登录凭据,以便用户可以跳过登录页面,我建议您使用ISharedPreferences。它会将数据保存在持久存储中。可以保存的数据是原始数据,例如int,boolean,string,float和stringset。请查看此thread

希望这可以提供帮助。