zoukankan      html  css  js  c++  java
  • android登陆接口调试

    最近项目要开始调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~~~~~~~~~~~~

  • 相关阅读:
    JavaScript学习总结(5)——Javascript面向(基于)对象编程
    JavaScript学习总结(4)——JavaScript数组
    高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要【华为云技术分享】
    AI:为你写诗,为你做不可能的事
    鲲鹏性能优化十板斧(二)——CPU与内存子系统性能调优
    鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法
    华为鲲鹏云之我见
    一站式应用平台,华为云实现自动化构建知识图谱
    化鲲为鹏,我有话说 ,鲲鹏ARM架构的优势
    【读一本书】《昇腾AI处理器架构与编程》--神经网络基本知识学习(1)
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3766913.html
Copyright © 2011-2022 走看看