实现登录:很好用的Android/Java网络请求http第三方开源类库

相关参考文章引用网址:
(方法封装)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包”

你可能感兴趣的:(实现登录:很好用的Android/Java网络请求http第三方开源类库)