最近项目要开始调API,于是自己写了个关于登陆界面调试的Demo,为了保护项目,接口文档里面的内容都是被我改过的,不涉及任何项目内容。当然,代码在运行成功后,上传至博客前,相应内容我也根据改过后的文档把代码进行了修改,这样便于大家阅读也便于自己以后进一步学习~~

首先是LoginActivity.java

public class LoginActivity extends Activity implements OnClickListener {
private EditText editId;
private EditText editPass;
private Button btLogin; private Context context;
private String userId=null;
private String userPass=null;
private boolean idOk=false;
private boolean passOk=false; private LoginInfo loginInfo;
private Dao dao; public static final int TYPE_SUCCESS = 0;
public static final int TYPE_FAILURE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
editId=(EditText)findViewById(R.id.code);
editPass=(EditText)findViewById(R.id.password);
btLogin=(Button)findViewById(R.id.bt);
btLogin.setOnClickListener(this); loginInfo=new LoginInfo();
dao=new Dao(context); initLogin();
}
public void initLogin(){
SharedPreferences sharedPreferences=getSharedPreferences("user_id_pass", Activity.MODE_PRIVATE);
userId=sharedPreferences.getString("user_id", "");//第二个参数是缺省值,就没有找到名为user_id的key时返回。这也是sharedPreference的好处之一,省了if的判定
// userPass=sharedPreferences.getString("user_pass", " ");
editId.setText(userId);//这样的目的是:第一次登陆时显示“ ”,第二次在登陆时显示正确的id(登陆成功后会用("user_id_pass"的sharepreference保存正确信息,即用户免去输入id,只需输入密码。
} public void saveRightLogin(){//正确的信息不是指传过来的!!传回来的是User实体需要的信息!只要传过来的是TYPE_SUCCESS,就说明我们填写的登陆信息正确,即可用SharedPreferences保存
SharedPreferences sharedPreferences=getSharedPreferences("user_id_pass", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString("user_id", userId);
editor.putString("user_pass", userPass);
editor.commit(); //put时一定要记得哦~~
} public void saveIsFirstLogin(){
SharedPreferences sharedPreferences= getSharedPreferences("is_firstLogin",Activity.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putBoolean("isFirst", false);
editor.commit();
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.bt:
userId=editId.getText().toString();
userPass=editPass.getText().toString();
if(!userId.equals("")){
idOk=true;
loginInfo.setLogin_id(userId);
}
if(!userPass.equals("")){
passOk=true;
loginInfo.setLogin_password( userPass );//此处参数应该是userPass加密后的形势。而不是userPass
}
if(idOk&&passOk){
dao.requestLogin(loginHandler, loginInfo);
}
break;
}
} private Handler loginHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case TYPE_SUCCESS:
saveRightLogin();//只要传回“成功”,就调用此方法!
SharedPreferences sharedPreferences= getSharedPreferences("is_firstLogin",Activity.MODE_PRIVATE);
if(sharedPreferences.getBoolean("isFirst", true)){//第一次登陆成功时因为还没有调用"is_firstLogin"的set方法,所以返回缺省值true
saveIsFirstLogin();//如果是第一次进来了,那么马上调用这个方法,把是否第一次改成false
Intent intent=new Intent();
intent.setClass(LoginActivity.this, WelcomeActivity.class);
startActivity(intent);
}
else{
Intent intent=new Intent();
intent.setClass(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
break;
case TYPE_FAILURE:
Toast.makeText(context, msg.obj.toString(), Toast.LENGTH_SHORT).show();
break; }
super.handleMessage(msg);
}
}; }

然后是实体 LoginInfo.java

public class LoginInfo {
private String login_id;
private String login_password;
public String getLogin_id() {
return login_id;
}
public void setLogin_id(String login_id) {
this.login_id = login_id;
}
public String getLogin_password() {
return login_password;
}
public void setLogin_password(String login_password) {
this.login_password = login_password;
} }

操作类 XUtilsDao.java

这个类主要是负责客户端和服务器端的操作,客户端提交数据,服务器端验证是否正确,通过服务器的返回码我们可以判定是否正确,若正确就可以继续解析用户信息。

注:一定要在androidmanifest.xml中加入网络访问权限哦 <uses-permission android:name="android.permission.INTERNET" />
~~不然会报java.net.UnknownHostException的错误~~菜菜菜菜鸟的俺第一次就犯这个错啦~~

返回的JSON文件形如:

{"login”:{"id":"     ","name":"     ","sex":"      "},     "number":"         ",      "message":"              "}

这个JSON解析很简单哦,外面一层里面一层!

接口文档:

此处用到了一个开源项目的jar包,github上可以下载。不得不说,开源可以让我们各自happy ending~~这样可以灰常方便我们和服务器“勾兑”啦~~哈哈

public class  Dao {
private static XUtilsDao dao; private Context context;
private CookieUtils cookieUtils;
private HttpUtils httpUtils; public static Dao getInstance(Context context){
if(dao==null){
dao=new XUtilsDao(context);//调用构造函数
}
return dao;
} public Dao(Context context){
this.context=context;
cookieUtils = new CookieUtils(context);
BasicClientCookie cookie = new BasicClientCookie("casm_cookie", "yes");//
        cookie.setPath("/");
cookieUtils.addCookie(cookie); httpUtils = new HttpUtils();
// 自动管理 cookie
httpUtils.configCookieStore(cookieUtils);
} public void requestLogin(final Handler handler,LoginInfo loginInfo){
RequestParams params=new RequestParams();// 默认编码UTF-8
params.addBodyParameter("id", loginInfo.getLogin_id());
Log.i("Tag","id______"+loginInfo.getLogin_id());
params.addBodyParameter("pass", loginInfo.getLogin_password());
Log.i("Tag","pass______"+loginInfo.getLogin_password());
httpUtils.send(HttpRequest.HttpMethod.POST, "http:**********",params, new RequestCallBack<String>(){ @Override
public void onFailure(HttpException arg0, String arg1) {
Log.i("Tag","失败___arg1___"+arg1 ); } @Override
public void onSuccess(ResponseInfo<String> arg0) {
Log.i("Tag","成功——arg0.result______"+arg0.result); String numberStr="";
String msgStr="";
String loginStr=""; String id="";
String name="";
String sex=""; JSONObject obj=null; try{
obj=new JSONObject(arg0.result);
// loginStr=obj.getString("login");//!!!!!!!要number是0时才会有login字段的返回
numberStr=obj.getString("number");
msgStr=obj.getString("message");
Log.i("Tag","解析状态码和成败信息——————"+numberStr+" "+msgStr);
}
catch(JSONException e1){
e1.printStackTrace();
} Message msg=handler.obtainMessage();
if(numberStr.equals("0")){
try{
loginStr=obj.getString("login");
Log.i("Tag","如果是成功,解析具体的用户信息——还是个对象形式————"+ loginInfoStr);
}
catch(JSONException e2){
e2.printStackTrace();
}
try{
JSONObject obj_info=new JSONObject( loginStr );
Log.i("Tag","obj_info————怎么啦——"+obj_info );
id=obj_info.getString("Id");
name=obj_info.getString("name");
sex=obj_info.getString("sex");
Log.i("Tag","解析用户——————"+id+" "+name+" "+sex);
}
catch(JSONException e3){ e3.printStackTrace( );
} msg.what=LoginActivity.TYPE_SUCCESS;
// HashMap<String,String> map=new HashMap<String,String>();
// map.put("id", id);
// map.put("name", name);
// map.put("sex", code);
// msg.obj=map;//此处可传回共实体类User用,此Demo省略
msg.sendToTarget();
}
else{
msg.what = LoginActivity.TYPE_FAILURE;
msg.obj = msgStr;
msg.sendToTarget();
}
} } ); }
}

WelcomeActivity 和 MainActivity非常简单,就只显示几个字而已!第一次登陆成功时会显示欢迎界面(一些app的介绍啊使用说明啊之类的)然后才是主界面;第二次登陆成功时就直接显示主界面啦!

后面几天要加班好好的调试接口啦,主要是数据和界面关联的逻辑~~~相信会是一个很棒的学习过程哦~~~~~~

哈哈哈~~祝所有人都Happy learning~~~~~~~~~~~~

android登陆接口调试的更多相关文章

  1. java程序员图文并茂细说Unity中调用Android的接口

    http://bbs.csdn.net/topics/391876421 最近做一个项目,为同事提供接口,能使他在Unity中调用Android中的函数来实现QQ登陆并获取用户信息.按照一些书上和一些 ...

  2. android studio ndk 调试

    一: 先看看用 ndk-gdb 手动调试 这种方法只适用于手动编写 Android.mk 的情况,因为我们要手动 build debug 版本的 .so 文件.具体可以参考我的前一篇文章. 1 And ...

  3. 高通Android平台硬件调试之Camera篇

    之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...

  4. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...

  5. python之编写登陆接口(第一天)

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 针对此实例写了有二种类型的脚本,略有不同,具体如下: 帐号文件account.txt内容如下: sam 123 david ...

  6. 在Mac系统上配置Android真机调试环境

    在Mac系统上配置Android真机调试环境 mac上配置安卓环境还说挺方便的,真机调试也比win上要好一些.win上被各种软件强行安装了xxx助手. 在mac上就了一个干净的感觉. 下载Androi ...

  7. 在android设备上调试ionic应用

    方法1: ionic run android -l -c 将会在console中输出日志信息 方法2: (1).使用usb连接android设备,并打开android设备的调试功能 (2).在chro ...

  8. Android如何完全调试framework层代码

    1 之前写过一篇文章:<Android实现开机调试system_process> 2 google的eclipse插件ADT的已经能够很方便的调试Android的apk了,但是调试的时候应 ...

  9. (转)Android之接口回调机制

    开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A ...

随机推荐

  1. VLC笔记 它 立志

    不过,别忘了找工作的时候毕业,我说:"至少不会操心你会饿死了". 直到刚刚我才认为我妈有点过于乐观了. 今天下午,在做vlc如今播放器部分,一堆代码看的我头大. 正在此时,boss ...

  2. 使用ILmerge合并Exe、Dll文件的帮助类

    原文:使用ILmerge合并Exe.Dll文件的帮助类 using System; using System.Collections.Generic; using System.Text; using ...

  3. POJ 3589 Number-guessing Game(简单题)

    [题目简述]:两个四位数,假设后一个数中的某个数与前一个相应的数的位置和值都相等.则统计数目由几个这种数.记为count1吧. 假设后一个数中的某个数与前一个数的数值相等,但位置不同. 此时这种数的个 ...

  4. ERROR: Error in Log_event::read_log_event(): 'read error', data_len: 438, event_type: 2

    分析从库1062问题,解析从库binlog日志,报错如下 [root@xxxdb0402 tmp]# mysqlbinlog mysql-bin.004271 > 4.log ERROR: Er ...

  5. Android - 缺少NDT选项和C/C++ Build选项 问题

    缺少NDT选项和C/C++ Build选项 问题 本文地址: http://blog.csdn.net/caroline_wendy 时间: 2014.9.3 使用ADT(Android Develo ...

  6. cowboy rest

    REST Flowcharts 这章节将通过一些列不同的流程图来介绍REST处理状态机. 一个请求主要有四条路线,一个是方法OPTIONS. 一个是方法GET和HEAD.一个是PUT.POST和PAT ...

  7. 如何用C#使用java

    如何使用C#调用Java 今天需要使用C#调用Java的包,研究了一下,大体是以下几种解决方案: 把Java包转换为DLL或者EXE后注册为com组件,之后调用. 使用web service 比如:H ...

  8. notepad扩展搜索,正则搜索

    Dos和windows采用回车+换行CR/LF表示下一行, 0d 0a 两个字节表示而UNIX/Linux采用’\n’换行符LF表示下一行(ASCII代码是10),0a一个字节表示MAC OS系统则采 ...

  9. finger用户名、主目录、停滞时间、登录时间

    finger yum install finger    1.作用    finger用来查询一台主机上的登录账号的信息,通常会显示用户名.主目录.停滞时间.登录时间.登录Shell等信息,使用权限为 ...

  10. 共享库方案解决WAS中JAR包冲突

    实现步骤: 1.        准备共享库JAR包 commons-httpclient-3.1.jar httpclient-4.3.3.jar httpcore-4.3.2.jar httpmim ...