实现登录:很好用的Android/Java网络请求http第三方开源类库
2016-12-01 10:40
471 查看
相关参考文章引用网址:
(方法封装)androidasynchttp开源项目的GET或POST方式实现:http://274137570-qq-com.iteye.com/blog/2301117
(方法未封装)09_android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例 :
http://blog.csdn.net/redarmy_chen/article/details/26980613
此处,只展示已封装好的:
封装的请求,HttpUtil.java:(此是引用原作者的,有修改)
LoginActivity.java:(本人项目中实现自写的代码)
需要导入的包:见“下载的jar包”
(方法封装)androidasynchttp开源项目的GET或POST方式实现:http://274137570-qq-com.iteye.com/blog/2301117
(方法未封装)09_android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例 :
http://blog.csdn.net/redarmy_chen/article/details/26980613
此处,只展示已封装好的:
封装的请求,HttpUtil.java:(此是引用原作者的,有修改)
package com.example.http; import com.example.common.Constant; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.FileAsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; public class HttpUtil { //private static final String BASE_URL="http://192.168.17.99/"; private static AsyncHttpClient client=new AsyncHttpClient(); public static void setTimeout(){ client.setTimeout(6*1000); } /** * * @param url 请求网址 * @param params 上传给接口(或服务器)的参数 * @param responseHandler new AsyncHttpResponseHandler()//返回的的信息是byte[]字段 new TextHttpResponseHandler()//返回的是信息是String字段 new JsonHttpResponseHandler()//返回的信息是相对应的JSON字段 */ public static void get(String url,RequestParams params,AsyncHttpResponseHandler responseHandler){ client.get(getAbsoluteUrl(url), params, responseHandler); } /** * * @param url 请求网址 * @param params 上传给接口(或服务器)的参数 * @param responseHandler new AsyncHttpResponseHandler()//返回的的信息是byte[]字段 new TextHttpResponseHandler()//返回的是信息是String字段 new JsonHttpResponseHandler()//返回的信息是相对应的JSON字段 */ public static void post(String url,RequestParams params,AsyncHttpResponseHandler responseHandler){ client.post(getAbsoluteUrl(url), params, responseHandler); } public static void downLoad(String url,RequestParams params,FileAsyncHttpResponseHandler fileAsyncHttpResponseHandler){ client.get(getAbsoluteUrl(url), params, fileAsyncHttpResponseHandler); } private static String getAbsoluteUrl(String relativeUrl){ return Constant.BASE_URL+relativeUrl; } }
LoginActivity.java:(本人项目中实现自写的代码)
package com.example.hanwayoa; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import com.example.common.Constant; import com.example.http.HttpUtil; import com.example.util.ToolPackage; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.JsonHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.loopj.android.http.TextHttpResponseHandler; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.Toast; import android.widget.ToggleButton; /** * 登录页面 * @author Administrator * */ public class LoginActivity extends Activity implements OnClickListener { private EditText userName;//登录名 private EditText passWord;//登录密码 private Button loginBtn;//登录 private ToggleButton showpassword;//明文显示或密文显示密码 private EditText password;//密码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); loginBtn=(Button) findViewById(R.id.loginBtn); userName=(EditText) findViewById(R.id.userName); passWord=(EditText) findViewById(R.id.passWord); showpassword=(ToggleButton)findViewById(R.id.showPassWord); password=(EditText) findViewById(R.id.passWord); showpassword.setOnClickListener(this); loginBtn.setOnClickListener(this); //获取CheckBox实例 CheckBox rememberName = (CheckBox)this.findViewById(R.id.rememberName); //绑定监听器 rememberName.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton arg0, boolean arg1) { // TODO Auto-generated method stub Toast.makeText(LoginActivity.this, arg1?"选中了":"取消了选中" , Toast.LENGTH_LONG).show(); } }); } @Override public void onClick(View v) { if(v==showpassword){//明文或密文显示密码 //根据ToggleButton的状态来明文或密文方式显示密码 if(showpassword.isChecked()){//如果ToggleButton显示选中显示状态,明文显示密码 LoginActivity.this.password.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); }else{//如果ToggleButton不是选中状态,密文方式显示密码 LoginActivity.this.password.setTransformationMethod(PasswordTransformationMethod.getInstance()); } } if(v==loginBtn){ String userName=this.userName.getText().toString();//用户输入的用户名 String passWord=this.passWord.getText().toString();//用户输入的密码 if(userName.equals("")||passWord.equals("")){//如果用户没有输入用户名或密码,提示 Toast.makeText(this,"用户名或密码不能为空",Toast.LENGTH_LONG).show(); }else{// 发送请求给服务器 // loginByAsyncHttpClientPost(userName,passWord);// 发送请求给服务器(注:此处为未封装的写法) HttpUtil.post("Login",getParams(userName, passWord),jsonResponseHandler); /* *HttpUtil.post("Login",getParams(userName, passWord),jsonResponseHandler); *第3个参数jsonResponseHandler说明如下: * new AsyncHttpResponseHandler()//返回的的信息是byte[]字段 * new TextHttpResponseHandler()//返回的是信息是String字段 * new JsonHttpResponseHandler()//返回的信息是相对应的JSON字段 * */ /*Intent i=new Intent();//Intent i.setClass(this, HomePageDesktopActivity.class);//跳转到首页界面 startActivity(i);*/ } } } /** * 获取参数RequestParams params的方法 * * @param userName 用户输入的登录名 * @param passWord 用户输入的登录密码 * @return 返回要提交服务器的数据 */ private RequestParams getParams(String userName,String passWord){ RequestParams params=new RequestParams(); params.put("emplcode",userName); params.put("password",passWord); return params; } /** * 新建对象用于封装获取参数AsyncHttpResponseHandler responseHandler的方法,此参数为请求之后返回的数据 * 返回的信息是相对应的JSON字段 */ private JsonHttpResponseHandler jsonResponseHandler=new JsonHttpResponseHandler(){//返回的信息是相对应的JSON字段 /** * 成功处理的方法: * statusCode:响应的状态码statusCode * headers:相应的头消息:比如响应的时间,响应的服务器 * response:响应的内容 * */ /*public void onSuccess(int statusCode, Header[] headers, org.json.JSONArray response) {};//相对应的JSONArray字段*/ /*public void onSuccess(int statusCode, Header[] headers, String responseString) {};//相对应的String字段*/ public void onSuccess(int statusCode, Header[] headers, org.json.JSONObject response) { if(statusCode==200){ System.out.println(response); boolean flag= ToolPackage.ifNOtNull(response); if(ToolPackage.ifNOtNull(response)){ try { JSONObject jsonData=response.getJSONObject("data"); String sidStr; if(jsonData.has("sid")){//判断是否有sid这个字段存在 sidStr=jsonData.getString("sid"); if(sidStr==null||sidStr.length()==0){ Toast.makeText(LoginActivity.this,"请检查登录名和登录密码是否正确",Toast.LENGTH_LONG).show(); return;//终止方法的执行,不能登录 } }else{//没有sid这个字段就不让登录,终止程序的执行 return;//终止方法的执行,不能登录 } Intent i=new Intent();//Intent //i.setClass(this, HomePageDesktopActivity.class);//在异步线线程中这样写是报错的,如下行写就是对的了.或从单纯的类角度来理解,这是一个内部类,指向本类,要用"类名+this"。 i.setClass(LoginActivity.this, HomePageDesktopActivity.class);//跳转到首页界面 startActivity(i); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; /** * 失败处理的方法: * arg0、arg1、arg2与成功处理的方法一致 * arg3:响应失败的错误信息封装到这个异常对象中 */ public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { throwable.getStackTrace(); }; }; /** * 新建对象用于封装获取参数AsyncHttpResponseHandler responseHandler的方法,此参数为请求之后返回的数据 * 返回的是信息是String字段 */ private TextHttpResponseHandler textResponseHandler=new TextHttpResponseHandler() {//返回的是信息是String字段 /** * 成功处理的方法: * arg0:响应的状态码statusCode * arg1:相应的头消息:比如响应的时间,响应的服务器 * arg2:响应的内容 */ @Override public void onSuccess(int arg0, Header[] arg1, String arg2) { if(arg0==Constant.STATUS_OK){ System.out.println(arg2); } } /** * 失败处理的方法: * arg0、arg1、arg2与成功处理的方法一致 * arg3:响应失败的错误信息封装到这个异常对象中 */ @Override public void onFailure(int arg0, Header[] arg1, String arg2, Throwable arg3) { arg3.getStackTrace();//把错误的信息打印出来 } }; private void loginByAsyncHttpClientPost(String userName,String passWord){//(注:此处为未封装的写法) AsyncHttpClient client=new AsyncHttpClient();//创建异步请求的客户端对象 String url="http://www.honorway.cn/TH_HIS_OA_API/api/" + "Login";//定义请求的地址 //创建请求的封装对象 RequestParams param=new RequestParams(); param.put("username", userName);//设置请求的参数名和参数值 param.put("password", passWord);//设置请求的参数名和参数值 //执行post方法 AsyncHttpResponseHandler() client.post(url, param, new AsyncHttpResponseHandler()//返回的的信息是byte[]字段 //new TextHttpResponseHandler()//返回的是信息是String字段 //new JsonHttpResponseHandler()//返回的信息是相对应的JSON字段 { //1.用new AsyncHttpResponseHandler():返回的的信息是byte[]字段 /** * 成功处理的方法 * arg0:响应的状态码 * arg1:相应的头消息:比如响应的时间,响应的服务器 * arg2:响应的内容 */ @Override public void onSuccess(int arg0, Header[] arg1, byte[] arg2) { if(arg0==Constant.STATUS_OK){ System.out.println(arg2); } } /** * 失败处理的方法 * arg0\arg1\arg2同上。 * arg3:响应失败的错误信息封装到这个异常对象中 */ @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { arg3.printStackTrace();//把错误的信息打印出来 } //2.用TextHttpResponseHandler():返回的是信息是String字段 /* @Override public void onSuccess(int arg0, Header[] arg1, String arg2) { // TODO Auto-generated method stub } @Override public void onFailure(int arg0, Header[] arg1, String arg2, Throwable arg3) { // TODO Auto-generated method stub } */ //3.用new JsonHttpResponseHandler():返回的信息是相对应的JSON字段 /*@Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { // TODO Auto-generated method stub super.onSuccess(statusCode, headers, response); System.out.println(response); }*/ /*@Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { // TODO Auto-generated method stub super.onFailure(statusCode, headers, responseString, throwable); }*/ }); } }
需要导入的包:见“下载的jar包”
相关文章推荐
- 12_Android中HttpClient的应用,doGet,doPost,doHttpClientGet,doHttpClient请求,另外借助第三方框架实现网络连接的应用,
- 12_Android中HttpClient的应用,doGet,doPost,doHttpClientGet,doHttpClient请求,另外借助第三方框架实现网络连接的应用,
- 【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目
- 网络数据请求实践一:android-async-http实现下载和上传
- Android HttpUtils网络请求工具类的实现
- Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)
- 利用android-async-http开源项目实现网络代码查看器
- android---利用android-async-http开源项目实现网络图片查看器
- Android请求网络--第三方库Android-async-http的使用(6)
- android请求网络——第三方库android-async-http的使用(2)
- Android HTTP网络请求的异步实现
- Android中Http网络请求库Asnyc-http的使用第三方库
- java2: HttpClient,实现登录,请求等操作,session保持
- Android HTTP网络请求的异步实现
- ASIHttpRequest网络请求第三方类库使用方法详解
- Java&Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同...
- android请求网络——第三方库android-async-http的使用(3)
- android请求网络——第三方库android-async-http的使用(1)
- 网络编程---Android开源组件(Async-http)实现文件上传
- android http 通信(java原生类库实现)