一、前言

在空闲之余,学学新东西

二、服务端的代码编写与部署

这里采取的方式是MVC+EF返回Json数据,(本来是想用Nancy来实现的,想想电脑太卡就不开多个虚拟机了,用用IIS部署也好)

主要是接受客户端的登陆请求,服务器端返回请求的结果

这里的内容比较简单不在啰嗦,直接上代码了:

 using System.Linq;
using System.Web.Mvc;
namespace Catcher.AndroidDemo.EasyLogOn.Service.Controllers
{
public class UserController : Controller
{
public ActionResult LogOn(string userName, string userPwd)
{
bool result = IsAuth(userName,userPwd);
ReturnModel m = new ReturnModel();
if (result)
{
m.Code = "";
m.Msg = "Success";
}
else
{
m.Code = "";
m.Msg = "Failure";
}
return Json(m, JsonRequestBehavior.AllowGet);
}
public bool IsAuth(string name, string pwd)
{
using (Models.DBDemo db = new Models.DBDemo())
{
int count = db.UserInfo.Count(u=>u.UserName==name&&u.UPassword==pwd);
return count == ? true : false;
}
}
}
public class ReturnModel
{
public string Code { get; set; }
public string Msg { get; set; }
}
}

发布,测试一下是否可行

OK

三、客户端(Android)的编码实现

既然是登录,肯定有两个文本框和一个登陆按钮啦~

登录之后又要有什么呢,显示一下欢迎就够了,放一个TextView

下面就来布局一下(左边是Main.axml,右边是User.axml)

      

具体的布局代码如下:

Main.axml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="80px"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayoutForName">
<TextView
android:text="姓名:"
android:layout_width="81.5dp"
android:layout_height="match_parent"
android:id="@+id/textViewName"
android:textAllCaps="true"
android:textSize="25dp"
android:textStyle="bold"
android:gravity="center" />
<EditText
android:layout_width="291.0dp"
android:layout_height="match_parent"
android:id="@+id/txtName" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="80px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/linearLayoutForName"
android:layout_marginTop="20dp"
android:id="@+id/linearLayoutForPwd">
<TextView
android:text="密码:"
android:layout_width="81.5dp"
android:layout_height="match_parent"
android:id="@+id/textViewPwd"
android:textAllCaps="true"
android:textSize="25dp"
android:textStyle="bold"
android:gravity="center" />
<EditText
android:layout_width="291.0dp"
android:layout_height="match_parent"
android:id="@+id/txtPwd"
android:inputType="textPassword" />
</LinearLayout>
<Button
android:text="登录"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_below="@id/linearLayoutForPwd"
android:id="@+id/btnLogin"
android:textAllCaps="true"
android:textSize="25dp"
android:textStyle="bold"
android:gravity="center" />
</RelativeLayout>

User.axml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="Text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvInfo"
android:minHeight="60dp"
android:gravity="center"
android:textSize="20dp" />
</LinearLayout>

主要是是相对布局与线性布局的结合

布局好了,就该编写实现代码了!!

MainActivity.cs

主要就是接收用户的输入,进行判断和校验,通过的就跳转到下一页面。这里面还用到了一点网络请求。

因为是演示,所以是一大堆代码。。。

里面有用到json的解析,用的是Newtonsoft.Joson,当然,写法不规范,不要吐槽。

 using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
namespace Catcher.AndroidDemo.EasyLogOn
{
[Activity(Label = "简单的登录Demo", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
EditText myName = FindViewById<EditText>(Resource.Id.txtName);
EditText myPwd = FindViewById<EditText>(Resource.Id.txtPwd);
Button login = FindViewById<Button>(Resource.Id.btnLogin);
login.Click += delegate
{
string name = myName.Text;
string pwd = myPwd.Text;
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pwd))
{
Toast.MakeText(this, "请输入用户名和密码!!", ToastLength.Long).Show();
return;
}
else
{
string loginUrl = string.Format("http://192.168.1.102:8077/User/LogOn?userName={0}&userPwd={1}", name, pwd);
var httpReq = (HttpWebRequest)HttpWebRequest.Create(new Uri(loginUrl));
var httpRes = (HttpWebResponse)httpReq.GetResponse();
if (httpRes.StatusCode == HttpStatusCode.OK)
{
string result = new StreamReader(httpRes.GetResponseStream()).ReadToEnd();
result = result.Replace("\"", "'");
ReturnModel s = JsonConvert.DeserializeObject<ReturnModel>(result);
if (s.Code == "")
{
var intent = new Intent(this, typeof(UserActivity));
intent.PutExtra("name", name);
StartActivity(intent);
}
else
{
Toast.MakeText(this, "用户名或密码不正确!!", ToastLength.Long).Show();
return;
}
}
}
};
}
}
public class ReturnModel
{
public string Code { get; set; }
public string Msg { get; set; }
}
}

下面就是跳转之后的页面了,就是从MainActivity传过来的用户名显示在TextView那里。

 using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
namespace Catcher.AndroidDemo.EasyLogOn
{
[Activity(Label = "用户首页")]
public class UserActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your application here
SetContentView(Resource.Layout.User);
TextView info = FindViewById<TextView>(Resource.Id.tvInfo);
string name = Intent.GetStringExtra("name");
info.Text = name + "欢迎您的到来!" ;
}
}
}

然后就OK了,是不是也很Easy呢。

下面来看看效果

什么都不输入的时候,输入错误的时候,输入正确的时候

         

如果想生成apk文件的话,需要将模式调整为Release模式!!!

四、总结对比

跟原生的Android开发(Java)相比,有很多相似的地方也有很多细节区别,适应就好。

做这个Demo的时候,编写界面的时候貌似没发现有智能提示,不知道有没有处理的好办法!

需要注意的是,这个Demo在数据的传输过程中并没有进行加解密的处理,这是不可取的!

其他的话,就两个字的感觉,方便。

最后附上这个Demo的代码:

https://github.com/hwqdt/Demos/tree/master/src/Catcher.AndroidDemo

Xamarin.Android再体验之简单的登录Demo的更多相关文章

  1. Xamarin.Android之封装个简单的网络请求类

    一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...

  2. Xamarin.Android之Spinner的简单探讨

    一.前言 今天用了一下Spinner这个控件,主要是结合官网的例子来用的,不过官网的是把数据写在Strings.xml中的, 某种程度上,不是很符合我们需要的,比较多的应该都是从数据库读出来,绑定上去 ...

  3. Xamarin.Android之UI Test简单入门

    一.前言 相信Xamarin免费之后会有更多的人加入进来,这也是我一直以来最希望看到的事,更多的人加入到这个社区中,为这个社区贡献自己的一份力量,国内当前还没有一个比较正规或者说是名气比较大的Xama ...

  4. Android调用Jni,非常简单的一个Demo

    step1:创建一个android项目       Project Name:jnitest       Build Target: Android 1.6       Application Nam ...

  5. flask框架(二):简单的登录demo

    一:main.py # -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/3 22:58 from flask import ...

  6. Xamarin.Android之简单的抽屉布局

    0x01 前言 相信对于用过Android版QQ的,应该都不会陌生它那个向右滑动的菜单(虽说我用的是Lumia) 今天就用Xamarin.Android实现个比较简单的抽屉布局.下面直接进正题. 0x ...

  7. Xamarin Android自定义文本框

    xamarin android 自定义文本框简单的用法 关键点在于,监听EditText的内容变化,不同于java中文本内容变化去调用EditText.addTextChangedListener(m ...

  8. MVP架构在xamarin android中的简单使用

    好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪 ...

  9. 基于Xamarin Android实现的简单的浏览器

    最近做了一个Android浏览器,当然功能比较简单,主要实现了自己想要的一些功能……现在有好多浏览器为什么还要自己写?当你使用的时候总有那么一些地方不如意,于是就想自己写一个. 开发环境:Xamari ...

随机推荐

  1. linux下git以及github的连接与使用

    简单理解 Git 的思想和基本的工作原理,能够更好的进一步和使用Git.在开始学习Git 的时候,最好不要把Git的各种概念和其他的版本控制系统诸如 Subversion 等相比,否则容易混淆每个操作 ...

  2. UI控件(UITextField)

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UITextField* textField1 = ...

  3. 新浪微博UWP版-实现‘分享功能’的艰难路

    索引 介绍 遇到的问题 寻求帮助 最终的解决方案 最终效果 介绍 在整个Team的共同努力下,在众多WPer的期待下,Weibo UWP版终于正式发布了.有关Weibo UWP版更多的信息请大家参考这 ...

  4. CSS3 特效分解一

    先声明下,下面的特效不是我发明的,对CSS3的创造力还不够,只是看了别人demo的源码,一点一点分析出来的.整理出的笔记,分享给大家.因为源码是好,但是一头扎进去半天出不来. 首先看个登陆框,如下,相 ...

  5. iconfont的蜕化操作

    很多国外的网站,访问的时候可以看到,页面先是大面积白一下,然后恢复正常.原因是网页上用到了 webfont,这些页面很多情况都是直接引用 google 的 webfont 地址,中华大局域网下,由于网 ...

  6. Redis系列(二)-Hredis客户端设计及开源

    接上篇c#实现redis客户端(一),重新整理些了下. 阅读目录: 项目说明 Hredis设计图 单元测试场景 总结 项目说明 背景:因为有地方要用,而又没找到对sentinel良好支持的Net客户端 ...

  7. iOS block种类和切换

    block 分为三种 NSGlobalBlock,NSStackBlock, NSMallocBlock. NSGlobalBlock:类似函数,位于text段: NSStackBlock:位于栈内存 ...

  8. ASP.NET Web API自身对CORS的支持: CORS授权检验的实施

    通过<EnableCorsAttribute特性背后的故事>我们知道:由CorsPolicyProvider提供的CorsPolicy表示目标Action采用的资源授权策略,ASP.NET ...

  9. Oozie 快速入门

    设想一下,当你的系统引入了spark或者hadoop以后,基于Spark和Hadoop已经做了一些任务,比如一连串的Map Reduce任务,但是他们之间彼此右前后依赖的顺序,因此你必须要等一个任务执 ...

  10. Vue 入门指南

    英文:http://vuejs.org/guide/index.html 介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式的ViewModel层,它连 ...