android登陆接口调试
2013-12-20 17:05
477 查看
最近项目要开始调API,于是自己写了个关于登陆界面调试的Demo,为了保护项目,接口文档里面的内容都是被我改过的,不涉及任何项目内容。当然,代码在运行成功后,上传至博客前,相应内容我也根据改过后的文档把代码进行了修改,这样便于大家阅读也便于自己以后进一步学习~~
首先是LoginActivity.java
然后是实体 LoginInfo.java
操作类 XUtilsDao.java
这个类主要是负责客户端和服务器端的操作,客户端提交数据,服务器端验证是否正确,通过服务器的返回码我们可以判定是否正确,若正确就可以继续解析用户信息。
返回的JSON文件形如:
{"login”:{"id":" ","name":" ","sex":" "}, "number":" ", "message":" "}
这个JSON解析很简单哦,外面一层里面一层!
接口文档:
此处用到了一个开源项目的jar包,github上可以下载。不得不说,开源可以让我们各自happy ending~~这样可以灰常方便我们和服务器“勾兑”啦~~哈哈
WelcomeActivity 和 MainActivity非常简单,就只显示几个字而已!第一次登陆成功时会显示欢迎界面(一些app的介绍啊使用说明啊之类的)然后才是主界面;第二次登陆成功时就直接显示主界面啦!
后面几天要加班好好的调试接口啦,主要是数据和界面关联的逻辑~~~相信会是一个很棒的学习过程哦~~~~~~
哈哈哈~~祝所有人都Happy learning~~~~~~~~~~~~
首先是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登陆接口调试
- Android,iso接口调试-抓包调试接口
- [Tools] 一种调试 Android App 接口的方式 (Fiddler/Wireshark)
- postman使用 Android java后端 接口调试工具
- HttpClient调试android接口-通用方法
- S5P4418 android 5.1 EC20 R2.0 PCIE接口调试记录
- 用postman调试接口跳过用户登陆的方式
- yii2 和 ios,android 调试接口遇到500错误,php遇到的坑
- 【译文】 Android媒体相关开发应用程序接口
- Android开发中相见恨晚的方法、类或接口
- Android 登陆页面仿拉钩动效,你总会需要它!
- 微博登陆接口调用过程(Java +html + js )
- 使用WIFI连接android进行调试和adb操作
- IDA调试Android so源码
- 思科路由器全局、接口、协议调试
- Android: 调试C++代码
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- android虚拟键盘弹出遮挡登陆按钮问题
- android 调试卡在:Waiting for Debugger - Application XXX is waiting for the debugger to Attach" 解决方法
- android平台的三种网络接口