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~~~~~~~~~~~~

posted @ 2013-12-20 17:05  IT专业户  阅读(453)  评论(0编辑  收藏  举报