您的位置:首页 > 理论基础 > 计算机网络

实现登录:很好用的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:(此是引用原作者的,有修改)

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包”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐