반응형

안녕하세요 코딩연습생입니다

 

언젠가느 해야지 해야지 미루고 미루다 결국 시작하게 된 앱 개발

 

언어는 Kotlin(코틀린) 언어를 사용하게 되었습니다

 

제 블로그에 자주 오셨던 분들이라면 아시겠지만 제 주언어는 C#이였습니다

 

그렇기에 많은 분들이 Xamarin(자마린)을 추천해주시고 사용할거라 예상하셨을텐데

 

이번에는 뭔가 새로운 구조에 도전을 해보고 싶기도 하고 당장 바로 앞을 보는것이 아닌 더 먼 앞을 내다보았을때

 

결국 자바 계열을 선택하는게 좋을거 같아서 Kotlin을 선택하게 되었습니다

 

코틀린을 사용해서 주식 관련 앱을 만들었고

 

해당 앱의 주 내용은 Kotlin 카테고리를 생성하여 포스팅할 예정입니다

 

 

https://play.google.com/store/apps/details?id=com.codingman.stockhelper 

 

주식헬퍼(StockHelper) - 주식 도우미 - Google Play 앱

이 주식정보를 활용하여 다양한 UI를 제공합니다

play.google.com

 

해당 앱의 설명을 간단히 설명드리면

 

주식 관련 대형 커뮤니티 사이트 및 네이버, 다음과 같은 대형 포털의 주식 정보를 활용하여

 

조건에 의한 가점을 평가하여 종목에 대한 Top10을 만들어 주고

 

기업정보, 재무정보, 주식차트, 관련뉴스 등을 연계하여 확인 하는 앱입니다

 

아직 모든 기능이 완성되지 않았지만 1인 개발자로써 천천히 시간을 투자하여 

 

끝까지 완성시킬 예정입니다

 

▶ 앱 첫 화면

 

▶ 주식 관련 정보 수집 화면

 

▶ 가점 평가 이후 랭킹 화면

 

아직 미비하고 부족한 부분도 많치만 꼭 완성시켜 앱의 이름처럼 주식도우미가 될 수 있도록 하겠습니다

 

아 그리고 현재까지 개발된 부분에 대해서 구글 스토어에 등록되어 있습니다

 

아래 링크를 통해 다운받아 사용해보실수 있습니다

 

https://play.google.com/store/apps/details?id=com.codingman.stockhelper 

 

주식헬퍼(StockHelper) - 주식 도우미 - Google Play 앱

이 주식정보를 활용하여 다양한 UI를 제공합니다

play.google.com

 

많은 이용 부탁드립니다

반응형
반응형

안녕하세요

 

포스팅으로 열공하고 있는 코딩연습생입니다

 

저번 포스팅에서 비쥬얼스튜디오 2017을 이용하여 간단한 로그인 앱 만드는 방법을 포스팅했는데요

 

그 포스팅에 이어 로그인 할때 계정이 없을 경우 회원가입을 해야 하지요?

 

그래서 MSSQL와 연동하여 회원가입이 가능하도록 한번 만들어 봤습니다

 

물론 회원가입시에 ID 중복체크, 패스워트 생성 규칙, 주소 검색, 등 많은 기능이 필요한데

 

이번 시간에는 기초적인 부분만 만들어 보았습니다

 

첫번째 ID생성(문자열)

 

두번째 패스워드(문자열)

 

세번째 이메일(문자열)

 

이렇게 3가지만 등록한뒤 생성 버튼을 클릭하면 DB에 Data가 생성되어 로그인이 되도록 하는 구조 입니다

 

이렇게 기초 적인 부분을 만든뒤 차츰차츰 기능을 하나씩 구현하는게 바로 코딩에 재미겠죠ㅎ

 

그럼 진행해 보도록 하겠습니다

 

일단 저번 시간 포스팅까지 완성이 되어야 이어서 가능하니 아래 링크를 통해서 로그인 샘플 먼저 완성해주세요

 

https://codingman.tistory.com/96

 

[Xamarin Forms] 자마린으로 간단한 로그인 앱 만들기

안녕하세요. 코딩연습생입니다 비쥬얼스튜디오 Xamarin을 이용한 로그인 창 만들기 입니다 저도 처음 접해보는 부분이라 많이 헷갈리고 연습을 하고 있습니다~ 음..일단 시작에 앞서 비쥬얼스튜디오의 Cross-Platf..

codingman.tistory.com

 

그러면 해당 프로젝트 파일 중에 해당 위치로 찾아 갑니다

 

로그인 화면에서 이미 만들어져 있는 부분인데 그 부분에서 INSERT 부분만 추가가 된것입니다

 

*SignUpPage.xaml.cs

using System;
using System.Linq;
using Xamarin.Forms;
using System.Data;
using System.Data.SqlClient;

namespace LoginNavigation
{
	public partial class SignUpPage : ContentPage
	{
		public SignUpPage ()
		{
			InitializeComponent ();
		}

		async void OnSignUpButtonClicked (object sender, EventArgs e)
		{
			var user = new User () {
				Username = usernameEntry.Text,
				Password = passwordEntry.Text,
				Email = emailEntry.Text
			};

            
            CreateSign();

			// Sign up logic goes here
			var signUpSucceeded = AreDetailsValid (user);
			if (signUpSucceeded) {
				var rootPage = Navigation.NavigationStack.FirstOrDefault ();
				if (rootPage != null) {
					App.IsUserLoggedIn = true;
					Navigation.InsertPageBefore (new MainPage (), Navigation.NavigationStack.First ());
					await Navigation.PopToRootAsync ();
				}
			} else {
				messageLabel.Text = "Sign up failed";
			}
		}

        public void CreateSign()
        {
            SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder();
            sqlConnectionStringBuilder.DataSource = "서버IP";
            sqlConnectionStringBuilder.InitialCatalog = "DB명";
            sqlConnectionStringBuilder.UserID = "계정";
            sqlConnectionStringBuilder.Password = "계정암호";
            sqlConnectionStringBuilder.IntegratedSecurity = false;
            SqlConnection conn = new SqlConnection(sqlConnectionStringBuilder.ConnectionString);
            conn.Open();

            try
            {
                string Query = "MERGE USER_MAST";
                Query += "            USING(SELECT 'X' AS DUAL) AS B ";
                Query += "               ON [USER_ID] = '" + usernameEntry.Text + "'";
                Query += "            WHEN MATCHED THEN";
                Query += "                 UPDATE SET USER_PSWD = '" + passwordEntry.Text + "'";
                Query += "            WHEN NOT MATCHED THEN";
                Query += "                 INSERT([USER_ID], USER_PSWD) VALUES ('" + usernameEntry.Text + "','" + passwordEntry.Text + "');";
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;

                cmd.CommandText = Query;
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception Ex)
            {
                conn.Close();
            }
            finally
            {
                conn.Close();
            }
        }

        bool AreDetailsValid (User user)
		{
			return (!string.IsNullOrWhiteSpace (user.Username) && !string.IsNullOrWhiteSpace (user.Password) && !string.IsNullOrWhiteSpace (user.Email) && user.Email.Contains ("@"));
		}
	}
}

 

*SignUpPageCS.cs

using System;
using System.Linq;
using Xamarin.Forms;
using System.Data;
using System.Data.SqlClient;

namespace LoginNavigation
{
	public class SignUpPageCS : ContentPage
	{
		Entry usernameEntry, passwordEntry, emailEntry;
		Label messageLabel;

		public SignUpPageCS ()
		{
			messageLabel = new Label ();
			usernameEntry = new Entry {
				Placeholder = "username"	
			};
			passwordEntry = new Entry {
				IsPassword = true
			};
			emailEntry = new Entry ();
			var signUpButton = new Button {
				Text = "Sign Up"
			};
			signUpButton.Clicked += OnSignUpButtonClicked;

			Title = "Sign Up";
			Content = new StackLayout { 
				VerticalOptions = LayoutOptions.StartAndExpand,
				Children = {
					new Label { Text = "Username" },
					usernameEntry,
					new Label { Text = "Password" },
					passwordEntry,
					new Label { Text = "Email address" },
					emailEntry,
					signUpButton,
					messageLabel
				}
			};
		}

		async void OnSignUpButtonClicked (object sender, EventArgs e)
		{
			var user = new User () {
				Username = usernameEntry.Text,
				Password = passwordEntry.Text,
				Email = emailEntry.Text
			};

            CreateSign();

            // Sign up logic goes here

            var signUpSucceeded = AreDetailsValid (user);
			if (signUpSucceeded) {
				var rootPage = Navigation.NavigationStack.FirstOrDefault ();
				if (rootPage != null) {
					App.IsUserLoggedIn = true;
					Navigation.InsertPageBefore (new MainPageCS (), Navigation.NavigationStack.First ());
					await Navigation.PopToRootAsync ();
				}
			} else {
				messageLabel.Text = "Sign up failed";
			}
		}

        public void CreateSign()
        {
            SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder();
            sqlConnectionStringBuilder.DataSource = "서버IP";
            sqlConnectionStringBuilder.InitialCatalog = "DB명";
            sqlConnectionStringBuilder.UserID = "계정";
            sqlConnectionStringBuilder.Password = "계정암호";
            sqlConnectionStringBuilder.IntegratedSecurity = false;
            SqlConnection conn = new SqlConnection(sqlConnectionStringBuilder.ConnectionString);
            conn.Open();

            try
            {
                string Query = "MERGE USER_MAST";
                Query += "            USING(SELECT 'X' AS DUAL) AS B ";
                Query += "               ON [USER_ID] = '" + usernameEntry.Text + "'";
                Query += "            WHEN MATCHED THEN";
                Query += "                 UPDATE SET USER_PSWD = '" + passwordEntry.Text + "'";
                Query += "            WHEN NOT MATCHED THEN";
                Query += "                 INSERT([USER_ID], USER_PSWD) VALUES ('" + usernameEntry.Text + "','" + passwordEntry.Text + "');";
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;

                cmd.CommandText = Query;
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception Ex)
            {
                conn.Close();
            }
            finally
            {
                conn.Close();
            }
        }

        bool AreDetailsValid (User user)
		{
			return (!string.IsNullOrWhiteSpace (user.Username) && !string.IsNullOrWhiteSpace (user.Password) && !string.IsNullOrWhiteSpace (user.Email) && user.Email.Contains ("@"));
		}
	}
}

 

그런데 위의 INSERT 구문을 보시면 일반적인 INSERT문하고 조금 차이가 있죠??

 

제가 올린 포스팅 내용중에 보시면 INSERT와 UPDATE를 한번에 처리하는 구문입니다

 

자세한건 아래 링크를 통해서 확인해보시면 됩니다

 

https://codingman.tistory.com/98

 

[MSSQL] MERGE를 이용한 INSERT와 UPDATE 한번에 하기

안녕하세요~ 코딩 연습생입니다 코로나 사태 여러분 괜찮으신가요?? 언제쯤 잠잠해질지 참...얼른 백신이나 대책이 나왔으면 좋겠는데 마스크 때문에 숨도 잘 안쉬어지네요~ 그래도 할건 해야겠죠?ㅎㅎ 그래서 저..

codingman.tistory.com

 

이렇게 소스코딩을 완료 하셨다면 이제 빌드를 진행하여 실행을 해봐야겠죠?

 

로그인 메인 화면에서 우측 상단에 있는 SIGN UP이라는 글씨를 클릭하면 회원가입 화면으로 이동합니다

 

 

회원 가입 페이지로 이동하게 되면 아래와 같은 화면이 보이게 됩니다

 

회원가입 화면에서 Username(계정명), Password(패스워트), Email address(이메일) 정보를 입력합니다

*굳이 저랑 똑같이 입력하지 않으셔도 됩니다

 

저는 빨간색 글씨 처럼 입력 하였습니다

 

정보 입력이 모두 되셨다면 아래 SIGN UP 버튼을 누루시면 컨텐츠 메인 화면으로 이동하게 됩니다

 

 

컨텐츠 메인 화면으로 정상적으로 이동하셨다면 다음과 같이 우측 상단의 글씨 LOGOUT으로 변경이 됩니다

 

 

그러면 MSSQL DB에 정상적으로 데이터가 입력되었는지 확인해 볼까요?

 

SQL에서 USER_MAST 테이블을 조회해 보니 정상적으로 값이 INSERT 되었네요

 

만약에 이미 USER_MAST 테이블에 "테스트"라는 계정이 존재했다면 INSERT가 아니라 UPDATE가 진행되었을 겁니다

 

 

회원가입의 기본적인 기능이 담겨 있는 내용인데요

 

이부분에서 앞써 말씀드렸던 추가적인 기능들이 첨가가 된다면 좀더 있어보이는(?)ㅎ 그런 회원가입이 되지 않을까요?ㅎ

 

저도 시간을 투자해서 좀 더 발전시켜 봐야겠습니다

 

반응형
반응형

안녕하세요.

 

코딩연습생입니다

 

비쥬얼스튜디오 Xamarin을 이용한 로그인 창 만들기 입니다

 

저도 처음 접해보는 부분이라 많이 헷갈리고 연습을 하고 있습니다~

 

음..일단 시작에 앞서 비쥬얼스튜디오의 Cross-Platform에 대해 알아야 하는데요

 

간단하게 말해서 C#코드로 짠 앱 소스코드를 다양한 플렛폼에 간단하게 적용시킬수 있는 플랫폼이다

 

인데요...ㅎㅎ

 

아래 정말 설명을 잘 해 놓은 영상이 있어서 링크 걸어드리니 한번 보시는걸 추천 드립니다

 

https://www.youtube.com/watch?v=B_cjRSDve8Q&list=PLZiskT3TqIThspx9OPBNFY5xGKTKJFelG

 

이번에 만들 로그인창도 Cross-Platform 환경에서 제작을 할 것입니다

 

다소 복작하고 어려울수 있으나 일단 한번 따라서 완성 시키시고 나면 금방 이해가 가실거라 생각합니다

 

1. 프로젝트 생성

   - 비쥬얼스튜디오 2017환경에서 개발하엿습니다 참고해서 봐주세요

   - 파일 -> 새로만들기 -> 프로젝트

 

   - 프로젝트 형식은 Cross-Platform 형식이며, 모바일 앱(Xamarin.Forms) 형식의 폼을 구성해서 만듭니다

 

  - Cross Platform의 세부 설정입니다 빈화면에 호환되는 플랫폼의 종류 등을 설정 합니다

 

2. 폼 구성하기

   - Cross Platform 솔루션 구성을 먼저 이해해야 합니다

   - 전체 프로젝트를 감싸는 솔루션 밑에 플랫폼을 관장해야할 C# 프로젝트가 있고

     그 밑에 각 플렛폼에 따른 프로젝트가 있습니다

   - 프로젝트명.Droid : 안드로이드 플렛폼

   - 프로젝트명.IOS : 애플 플렛폼

   - 프로젝트폄.UWP : 테블릿 플렛폼

   - 저희가 수정할 부분은 C# 프로젝트 입니다

   - C#프로젝트 부분에서 App.xaml 파일을 마우스 오른쪽 버튼을 눌러 삭제 합니다

   - C# 프로젝트에서 마우스 오른쪽 버튼을 통해 새항목을 선택합니다

    - App.cs 클래스 파일을 추가합니다

 

 

 - App.cs 클래스 파일에 다음과 같이 코딩합니다

 

*App.cs

using Xamarin.Forms;

namespace LoginNavigation
{
	public class App : Application
	{
		public static bool IsUserLoggedIn { get; set; }

		public App ()
		{
			if (!IsUserLoggedIn) {
				MainPage = new NavigationPage (new LoginPage ());
			} else {
				MainPage = new NavigationPage (new LoginNavigation.MainPage ());
			}
		}

		protected override void OnStart ()
		{
			// Handle when your app starts
		}

		protected override void OnSleep ()
		{
			// Handle when your app sleeps
		}

		protected override void OnResume ()
		{
			// Handle when your app resumes
		}
	}
}

 

- 다시 C# 프로젝트에서 마우스 오른쪽 버튼을 클릭하여 클래스 파일을 추가 합니다

 

 

  - 클래스 명은 Constants.cs로 만들고 추가 합니다

 

 

- 새로 추가된 클래스 파일에 아래와 같이 코딩합니다

 

*Constants.cs

using System;
using System.Data;

namespace LoginNavigation
{
    public static class Constants
    {
        public static string Username = string.Empty;
        public static string Password = string.Empty;

	}
}

 

- 다시 항목 추가를 해줍니다

 - 이번에는 LoginPage.xaml 이름을 가진 콘텐츠 페이지를 추가합니다

 - 콘텐츠 페이지는 디자인 부분과 CS 부분의 소스가 두개로 입력됩니다

 - 처음 LoginPage.xaml 디자인 부분에 아래와 같이 코딩합니다

 

*LoginPage.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="LoginNavigation.LoginPage" Title="Login">
	<ContentPage.ToolbarItems>
		<ToolbarItem Text="Sign Up" Clicked="OnSignUpButtonClicked" />
	</ContentPage.ToolbarItems>
	<ContentPage.Content>
		<StackLayout VerticalOptions="StartAndExpand">
			<Label Text="Username" />
			<Entry x:Name="usernameEntry" Placeholder="username" />
			<Label Text="Password" />
			<Entry x:Name="passwordEntry" IsPassword="true" />
			<Button Text="Login" Clicked="OnLoginButtonClicked" />
			<Label x:Name="messageLabel" />
		</StackLayout>
	</ContentPage.Content>
</ContentPage>

  - 다음 LoginPage.xaml.cs 부분에 아래와 같이 코딩합니다

 

*LoginPage.xaml.cs

using System;
using Xamarin.Forms;
using System.Data;
using System.Data.SqlClient;

namespace LoginNavigation
{
	public partial class LoginPage : ContentPage
	{
		public LoginPage ()
		{
			InitializeComponent ();
		}

		async void OnSignUpButtonClicked (object sender, EventArgs e)
		{
			await Navigation.PushAsync (new SignUpPage ());
		}

		async void OnLoginButtonClicked (object sender, EventArgs e)
		{
			var user = new User {
				Username = usernameEntry.Text,
				Password = passwordEntry.Text
			};

            var isValid = AreCredentialsCorrect (user);
			if (isValid) {
				App.IsUserLoggedIn = true;
				Navigation.InsertPageBefore (new MainPage (), this);
				await Navigation.PopAsync ();
			} else {
				messageLabel.Text = "Login failed";
				passwordEntry.Text = string.Empty;
			}
		}


        bool AreCredentialsCorrect (User user)
		{
            return user.Username == Constants.Username && user.Password == Constants.Password;
		}
	}
}

 

  - 다시 C# 프로젝트에서 신규 클래스 파일을 추가합니다

  - 클래스 명칭은 LoginPageCs.cs파일로 합니다

  - 신규로 생성한 클래스 파일에 아래와 같이 코딩을 합니다

 

*LoginPageCS.cs

using System;
using Xamarin.Forms;
using System.Data;
using System.Data.SqlClient;

namespace LoginNavigation
{
	public class LoginPageCS : ContentPage
	{
		Entry usernameEntry, passwordEntry;
		Label messageLabel;

		public LoginPageCS ()
		{
			var toolbarItem = new ToolbarItem {
				Text = "Sign Up"
			};
			toolbarItem.Clicked += OnSignUpButtonClicked;
			ToolbarItems.Add (toolbarItem);

			messageLabel = new Label ();
			usernameEntry = new Entry {
				Placeholder = "username"	
			};
			passwordEntry = new Entry {
				IsPassword = true
			};
			var loginButton = new Button {
				Text = "Login"
			};
			loginButton.Clicked += OnLoginButtonClicked;

			Title = "Login";
			Content = new StackLayout { 
				VerticalOptions = LayoutOptions.StartAndExpand,
				Children = {
					new Label { Text = "Username" },
					usernameEntry,
					new Label { Text = "Password" },
					passwordEntry,
					loginButton,
					messageLabel
				}
			};
		}

		async void OnSignUpButtonClicked (object sender, EventArgs e)
		{
			await Navigation.PushAsync (new SignUpPageCS ());
		}

		async void OnLoginButtonClicked (object sender, EventArgs e)
		{
			var user = new User {
				Username = usernameEntry.Text,
				Password = passwordEntry.Text
			};

            var isValid = AreCredentialsCorrect (user);
			if (isValid) {
				App.IsUserLoggedIn = true;
				Navigation.InsertPageBefore (new MainPageCS (), this);
				await Navigation.PopAsync ();
			} else {
				messageLabel.Text = "Login failed";
				passwordEntry.Text = string.Empty;
			}
		}

        bool AreCredentialsCorrect (User user)
		{
			return user.Username == Constants.Username && user.Password == Constants.Password;
		}
	}
}


 

 - 다음 MainPage.xaml 파일에 아래와 같이 코딩 해줍니다

 - 콘텐츠 페이지 이기 때문에 xaml과 cs 부분으로 나뉘어져 있으니 주의 하시기 바랍니다

 - MainPage.xaml 부분 코딩 입니다

 

*MainPage.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="LoginNavigation.MainPage" Title="Main Page">
	<ContentPage.ToolbarItems>
		<ToolbarItem Text="Logout" Clicked="OnLogoutButtonClicked" />
	</ContentPage.ToolbarItems>
	<ContentPage.Content>
		<StackLayout>
			<Label Text="Main app content goes here" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
		</StackLayout>
	</ContentPage.Content>
</ContentPage>

* MainPage.xaml.cs

using System;
using Xamarin.Forms;

namespace LoginNavigation
{
	public partial class MainPage : ContentPage
	{
		public MainPage ()
		{
			InitializeComponent ();
		}

		async void OnLogoutButtonClicked (object sender, EventArgs e)
		{
			App.IsUserLoggedIn = false;
			Navigation.InsertPageBefore (new LoginPage (), this);
			await Navigation.PopAsync ();
		}
	}
}

 

- 다음 다시 신규 클래스 파일을 추가 합니다

 

  - 신규 클래스의 명칭은 MainPageCS.cs파일로 지정합니다

 

- 생성된 클래스 파일에 아래와 같이 코딩 합니다

 

*MainPageCS.cs

using System;
using Xamarin.Forms;

namespace LoginNavigation
{
	public class MainPageCS : ContentPage
	{
		public MainPageCS ()
		{
			var toolbarItem = new ToolbarItem {
				Text = "Logout"
			};
			toolbarItem.Clicked += OnLogoutButtonClicked;
			ToolbarItems.Add (toolbarItem);

			Title = "Main Page";
			Content = new StackLayout { 
				Children = {
					new Label {
						Text = "Main app content goes here",
						HorizontalOptions = LayoutOptions.Center,
						VerticalOptions = LayoutOptions.CenterAndExpand
					}
				}
			};
		}

		async void OnLogoutButtonClicked (object sender, EventArgs e)
		{
			App.IsUserLoggedIn = false;
			Navigation.InsertPageBefore (new LoginPageCS (), this);
			await Navigation.PopAsync ();
		}
	}
}

 

- 다시 컨텐츠 페이지를 하나 추가 합니다

 

  - 추가될 컨텐츠 페이지의 명칭은 signUpPage.xaml 입니다

 

  - SignUpPage.xaml과 SignUpPage.xaml.cs 파일에 아래와 같이 따로 코딩을 합니다

 

*SignUpPage.xaml 

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
			 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
			 x:Class="LoginNavigation.SignUpPage"
			 Title="Sign Up">
	<ContentPage.Content>
		<StackLayout VerticalOptions="StartAndExpand">
			<Label Text="Username" />
			<Entry x:Name="usernameEntry" Placeholder="username" />
			<Label Text="Password" />
			<Entry x:Name="passwordEntry" IsPassword="true" />
			<Label Text="Email address" />
			<Entry x:Name="emailEntry" />
			<Button Text="Sign Up" Clicked="OnSignUpButtonClicked" />
			<Label x:Name="messageLabel" />
		</StackLayout>
	</ContentPage.Content>
</ContentPage>

*SignUpPage.xaml.cs

using System;
using System.Linq;
using Xamarin.Forms;

namespace LoginNavigation
{
	public partial class SignUpPage : ContentPage
	{
		public SignUpPage ()
		{
			InitializeComponent ();
		}

		async void OnSignUpButtonClicked (object sender, EventArgs e)
		{
			var user = new User () {
				Username = usernameEntry.Text,
				Password = passwordEntry.Text,
				Email = emailEntry.Text
			};

			// Sign up logic goes here

			var signUpSucceeded = AreDetailsValid (user);
			if (signUpSucceeded) {
				var rootPage = Navigation.NavigationStack.FirstOrDefault ();
				if (rootPage != null) {
					App.IsUserLoggedIn = true;
					Navigation.InsertPageBefore (new MainPage (), Navigation.NavigationStack.First ());
					await Navigation.PopToRootAsync ();
				}
			} else {
				messageLabel.Text = "Sign up failed";
			}
		}

		bool AreDetailsValid (User user)
		{
			return (!string.IsNullOrWhiteSpace (user.Username) && !string.IsNullOrWhiteSpace (user.Password) && !string.IsNullOrWhiteSpace (user.Email) && user.Email.Contains ("@"));
		}
	}
}

 

  - 다시 클래스 파일을 추가 합니다

 

  - 추가될 클래스 파일의 명칭은 SingUppageCS.cs 입니다

 

  - 추가된 클래스 파일에 아래와 같이 코딩 합니다

 

*SignUpPage.xaml.cs

using System;
using System.Linq;
using Xamarin.Forms;

namespace LoginNavigation
{
	public class SignUpPageCS : ContentPage
	{
		Entry usernameEntry, passwordEntry, emailEntry;
		Label messageLabel;

		public SignUpPageCS ()
		{
			messageLabel = new Label ();
			usernameEntry = new Entry {
				Placeholder = "username"	
			};
			passwordEntry = new Entry {
				IsPassword = true
			};
			emailEntry = new Entry ();
			var signUpButton = new Button {
				Text = "Sign Up"
			};
			signUpButton.Clicked += OnSignUpButtonClicked;

			Title = "Sign Up";
			Content = new StackLayout { 
				VerticalOptions = LayoutOptions.StartAndExpand,
				Children = {
					new Label { Text = "Username" },
					usernameEntry,
					new Label { Text = "Password" },
					passwordEntry,
					new Label { Text = "Email address" },
					emailEntry,
					signUpButton,
					messageLabel
				}
			};
		}

		async void OnSignUpButtonClicked (object sender, EventArgs e)
		{
			var user = new User () {
				Username = usernameEntry.Text,
				Password = passwordEntry.Text,
				Email = emailEntry.Text
			};

			// Sign up logic goes here

			var signUpSucceeded = AreDetailsValid (user);
			if (signUpSucceeded) {
				var rootPage = Navigation.NavigationStack.FirstOrDefault ();
				if (rootPage != null) {
					App.IsUserLoggedIn = true;
					Navigation.InsertPageBefore (new MainPageCS (), Navigation.NavigationStack.First ());
					await Navigation.PopToRootAsync ();
				}
			} else {
				messageLabel.Text = "Sign up failed";
			}
		}

		bool AreDetailsValid (User user)
		{
			return (!string.IsNullOrWhiteSpace (user.Username) && !string.IsNullOrWhiteSpace (user.Password) && !string.IsNullOrWhiteSpace (user.Email) && user.Email.Contains ("@"));
		}
	}
}

 

  - 다시 클래스 파일을 하나더 추가 합니다

 

   - 클래스 명칭은 User.cs 입니다

 

   - 추가된 User.cs 파일에 아래와 같이 코딩 합니다

 

*User.cs

namespace LoginNavigation
{
	public class User
	{
		public string Username { get; set; }

		public string Password { get; set; }

		public string Email { get; set; }
	}
}

 

이제 여기까지 완료 하셨다면 코딩은 모두 끝낫습니다

 

빌드를 돌려 에뮬레이터를 실행해 주세요.

 

혹시 저와 같이 디바이스 빌드를 하실 분이라면 아래 링크를 참고해 주세요

 

https://codingman.tistory.com/95

 

[Microsoft Visual Studio 2017] Xamarin 디바이스로 디버깅 하기

안녕하세요 코딩연습생입니다 요즘 코로나 때문에 난리도 아니죠?ㅠ 제 주변에도 온통 관심사가 코로나에 가있습니다 이런 시국에 회사에서는 왜이렇게 일을 많이 주는걸까요....참 이해하기 힘든...ㅋㅋ 이번 포..

codingman.tistory.com

 

빌드가 완료가 되면 앱이 실행됩니다

 

 

정말 심플한 화면이 나오게 됩니다

 

다음번 포스팅에서 MSSQL와 연동하여 로그인 시키는 부분을 포스팅 하도록 하겠습니다

 

감사합니다~

반응형

+ Recent posts