Xamarin.Android再体验之简单的登录Demo
一、前言
在空闲之余,学学新东西
二、服务端的代码编写与部署
这里采取的方式是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的更多相关文章
- Xamarin.Android之封装个简单的网络请求类
一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...
- Xamarin.Android之Spinner的简单探讨
一.前言 今天用了一下Spinner这个控件,主要是结合官网的例子来用的,不过官网的是把数据写在Strings.xml中的, 某种程度上,不是很符合我们需要的,比较多的应该都是从数据库读出来,绑定上去 ...
- Xamarin.Android之UI Test简单入门
一.前言 相信Xamarin免费之后会有更多的人加入进来,这也是我一直以来最希望看到的事,更多的人加入到这个社区中,为这个社区贡献自己的一份力量,国内当前还没有一个比较正规或者说是名气比较大的Xama ...
- Android调用Jni,非常简单的一个Demo
step1:创建一个android项目 Project Name:jnitest Build Target: Android 1.6 Application Nam ...
- flask框架(二):简单的登录demo
一:main.py # -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/3 22:58 from flask import ...
- Xamarin.Android之简单的抽屉布局
0x01 前言 相信对于用过Android版QQ的,应该都不会陌生它那个向右滑动的菜单(虽说我用的是Lumia) 今天就用Xamarin.Android实现个比较简单的抽屉布局.下面直接进正题. 0x ...
- Xamarin Android自定义文本框
xamarin android 自定义文本框简单的用法 关键点在于,监听EditText的内容变化,不同于java中文本内容变化去调用EditText.addTextChangedListener(m ...
- MVP架构在xamarin android中的简单使用
好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪 ...
- 基于Xamarin Android实现的简单的浏览器
最近做了一个Android浏览器,当然功能比较简单,主要实现了自己想要的一些功能……现在有好多浏览器为什么还要自己写?当你使用的时候总有那么一些地方不如意,于是就想自己写一个. 开发环境:Xamari ...
随机推荐
- SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题
SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题 最近服务器执行收缩日志文件大小的job老是报错 我所用的一个批量收缩日志脚本 USE [master] GO /*** ...
- SQL Server最近怎样了
SQL Server最近怎样了 又到年终了,大家都作最后冲刺 最近园子里真的多了很多口水帖,无论大家争论得多么激烈,时间依然滴答滴答地过,争论完之后我们依然要继续埋头苦干 为年终奖.为明年做准备 这里 ...
- 前端神器avalonJS入门(三)
本章将介绍如何使用avalon来实现前端路由功能. 我们需要用到两个avalon路由配套模块—— mmHistory.js 和 mmRouter.js .其中mmHistory是用于历史管理,它会劫持 ...
- Docker:镜像操作和容器操作
镜像操作 列出镜像: $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6b ...
- C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字
C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字 +BIT祝威+悄悄在此留下版了个权的信息说: 上一篇得到了字形贴图及其位置字典(可导出为XML).本篇就利用此贴 ...
- Atitit 教育与培训学校 的计划策划 v4 qc18
Atitit 教育与培训学校 的计划策划 v4 qc18 1.1. 版本历史12. 教育历史的前世今生12.1. 自学vs 家庭学校vs 私立学校vs 公立学校模式 vs 企业内部学校 vs 其他商业 ...
- Android-异步任务-AsyncTask
什么是异步任务? 异步任务就是开一个子线程,然后让它去跑,它跑完了就会回来告诉你说,它跑完了,这是结果.这和Java中的回调差不多.我们在OKHttp中很长见到的 onSuccess() 和 onEr ...
- Spring声明式事务管理
一.Spring 的声明式事务管理概述 1.Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法 ...
- iOS-Swift编程
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- Android开发-之第一个程序:HelloWorld!
小编觉得不管学习什么编程的时候,第一个程序都是要求打印输出一个"HelloWorld!",那就从最简单的HelloWorld开始吧!哈哈~~~~ 一.创建一个Android工程 1 ...