在空閒之餘,學學新東西android
這裏採起的方式是MVC+EF返回Json數據,(原本是想用Nancy來實現的,想一想電腦太卡就不開多個虛擬機了,用用IIS部署也好)git
主要是接受客戶端的登錄請求,服務器端返回請求的結果github
這裏的內容比較簡單不在囉嗦,直接上代碼了:json
1 using System.Linq; 2 using System.Web.Mvc; 3 namespace Catcher.AndroidDemo.EasyLogOn.Service.Controllers 4 { 5 public class UserController : Controller 6 { 7 public ActionResult LogOn(string userName, string userPwd) 8 { 9 bool result = IsAuth(userName,userPwd); 10 ReturnModel m = new ReturnModel(); 11 if (result) 12 { 13 m.Code = "00000"; 14 m.Msg = "Success"; 15 } 16 else 17 { 18 m.Code = "00001"; 19 m.Msg = "Failure"; 20 } 21 return Json(m, JsonRequestBehavior.AllowGet); 22 } 23 public bool IsAuth(string name, string pwd) 24 { 25 using (Models.DBDemo db = new Models.DBDemo()) 26 { 27 int count = db.UserInfo.Count(u=>u.UserName==name&&u.UPassword==pwd); 28 return count == 1 ? true : false; 29 } 30 } 31 } 32 public class ReturnModel 33 { 34 public string Code { get; set; } 35 public string Msg { get; set; } 36 } 37 }
發佈,測試一下是否可行服務器
OK網絡
既然是登陸,確定有兩個文本框和一個登錄按鈕啦~app
登陸以後又要有什麼呢,顯示一下歡迎就夠了,放一個TextViewide
下面就來佈局一下(左邊是Main.axml,右邊是User.axml)佈局
具體的佈局代碼以下:測試
Main.axml
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent"> 6 <LinearLayout 7 android:orientation="horizontal" 8 android:minWidth="25px" 9 android:minHeight="80px" 10 android:layout_marginTop="20dp" 11 android:layout_width="match_parent" 12 android:layout_height="wrap_content" 13 android:id="@+id/linearLayoutForName"> 14 <TextView 15 android:text="姓名:" 16 android:layout_width="81.5dp" 17 android:layout_height="match_parent" 18 android:id="@+id/textViewName" 19 android:textAllCaps="true" 20 android:textSize="25dp" 21 android:textStyle="bold" 22 android:gravity="center" /> 23 <EditText 24 android:layout_width="291.0dp" 25 android:layout_height="match_parent" 26 android:id="@+id/txtName" /> 27 </LinearLayout> 28 <LinearLayout 29 android:orientation="horizontal" 30 android:minWidth="25px" 31 android:minHeight="80px" 32 android:layout_width="match_parent" 33 android:layout_height="wrap_content" 34 android:layout_below="@id/linearLayoutForName" 35 android:layout_marginTop="20dp" 36 android:id="@+id/linearLayoutForPwd"> 37 <TextView 38 android:text="密碼:" 39 android:layout_width="81.5dp" 40 android:layout_height="match_parent" 41 android:id="@+id/textViewPwd" 42 android:textAllCaps="true" 43 android:textSize="25dp" 44 android:textStyle="bold" 45 android:gravity="center" /> 46 <EditText 47 android:layout_width="291.0dp" 48 android:layout_height="match_parent" 49 android:id="@+id/txtPwd" 50 android:inputType="textPassword" /> 51 </LinearLayout> 52 <Button 53 android:text="登陸" 54 android:layout_width="match_parent" 55 android:layout_height="wrap_content" 56 android:layout_marginTop="20dp" 57 android:layout_below="@id/linearLayoutForPwd" 58 android:id="@+id/btnLogin" 59 android:textAllCaps="true" 60 android:textSize="25dp" 61 android:textStyle="bold" 62 android:gravity="center" /> 63 </RelativeLayout>
User.axml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:minWidth="25px" 7 android:minHeight="25px"> 8 <TextView 9 android:text="Text" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:id="@+id/tvInfo" 13 android:minHeight="60dp" 14 android:gravity="center" 15 android:textSize="20dp" /> 16 </LinearLayout>
主要是是相對佈局與線性佈局的結合
佈局好了,就該編寫實現代碼了!!
MainActivity.cs
主要就是接收用戶的輸入,進行判斷和校驗,經過的就跳轉到下一頁面。這裏面還用到了一點網絡請求。
由於是演示,因此是一大堆代碼。。。
裏面有用到json的解析,用的是Newtonsoft.Joson,固然,寫法不規範,不要吐槽。
1 using Android.App; 2 using Android.Content; 3 using Android.OS; 4 using Android.Widget; 5 using Newtonsoft.Json; 6 using System; 7 using System.IO; 8 using System.Net; 9 namespace Catcher.AndroidDemo.EasyLogOn 10 { 11 [Activity(Label = "簡單的登陸Demo", MainLauncher = true, Icon = "@drawable/icon")] 12 public class MainActivity : Activity 13 { 14 protected override void OnCreate(Bundle bundle) 15 { 16 base.OnCreate(bundle); 17 // Set our view from the "main" layout resource 18 SetContentView(Resource.Layout.Main); 19 EditText myName = FindViewById<EditText>(Resource.Id.txtName); 20 EditText myPwd = FindViewById<EditText>(Resource.Id.txtPwd); 21 Button login = FindViewById<Button>(Resource.Id.btnLogin); 22 login.Click += delegate 23 { 24 string name = myName.Text; 25 string pwd = myPwd.Text; 26 if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pwd)) 27 { 28 Toast.MakeText(this, "請輸入用戶名和密碼!!", ToastLength.Long).Show(); 29 return; 30 } 31 else 32 { 33 string loginUrl = string.Format("http://192.168.1.102:8077/User/LogOn?userName={0}&userPwd={1}", name, pwd); 34 var httpReq = (HttpWebRequest)HttpWebRequest.Create(new Uri(loginUrl)); 35 var httpRes = (HttpWebResponse)httpReq.GetResponse(); 36 if (httpRes.StatusCode == HttpStatusCode.OK) 37 { 38 string result = new StreamReader(httpRes.GetResponseStream()).ReadToEnd(); 39 result = result.Replace("\"", "'"); 40 ReturnModel s = JsonConvert.DeserializeObject<ReturnModel>(result); 41 if (s.Code == "00000") 42 { 43 var intent = new Intent(this, typeof(UserActivity)); 44 intent.PutExtra("name", name); 45 StartActivity(intent); 46 } 47 else 48 { 49 Toast.MakeText(this, "用戶名或密碼不正確!!", ToastLength.Long).Show(); 50 return; 51 } 52 } 53 } 54 }; 55 } 56 } 57 public class ReturnModel 58 { 59 public string Code { get; set; } 60 public string Msg { get; set; } 61 } 62 }
下面就是跳轉以後的頁面了,就是從MainActivity傳過來的用戶名顯示在TextView那裏。
1 using Android.App; 2 using Android.Content; 3 using Android.OS; 4 using Android.Widget; 5 namespace Catcher.AndroidDemo.EasyLogOn 6 { 7 [Activity(Label = "用戶首頁")] 8 public class UserActivity : Activity 9 { 10 protected override void OnCreate(Bundle savedInstanceState) 11 { 12 base.OnCreate(savedInstanceState); 13 // Create your application here 14 SetContentView(Resource.Layout.User); 15 TextView info = FindViewById<TextView>(Resource.Id.tvInfo); 16 string name = Intent.GetStringExtra("name"); 17 info.Text = name + "歡迎您的到來!" ; 18 } 19 } 20 }
而後就OK了,是否是也很Easy呢。
下面來看看效果
什麼都不輸入的時候,輸入錯誤的時候,輸入正確的時候
若是想生成apk文件的話,須要將模式調整爲Release模式!!!
跟原生的Android開發(Java)相比,有不少類似的地方也有不少細節區別,適應就好。
作這個Demo的時候,編寫界面的時候貌似沒發現有智能提示,不知道有沒有處理的好辦法!
須要注意的是,這個Demo在數據的傳輸過程當中並無進行加解密的處理,這是不可取的!
其餘的話,就兩個字的感受,方便。
最後附上這個Demo的代碼:
https://github.com/hwqdt/Demos/tree/master/src/Catcher.AndroidDemo