android线程登录_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > android线程登录

android线程登录

 2014/9/2 16:44:30  L_O_V_E_Java  程序员俱乐部  我要评论(0)
  • 摘要:主入口代码:packagecom.tp.soft.app;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importorg.apache.http.HttpResponse;importorg.apache.http.HttpStatus;importorg.json.JSONException;importorg.json.JSONObject;importandroid.app.Activity
  • 标签:android android线程 线程

主入口代码:

package com.tp.soft.app;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.tp.soft.http.HttpUtil;
import com.tp.soft.io.IOUtil;
import com.tp.soft.util.Constant;

public class MainActivity extends Activity implements OnClickListener{

    private EditText mUser,mPwd;
    private Button mSumbit;
    private ProgressDialog mProgressDialog;
    private String user;
    private String pwd;
    private Handler loginHandler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            boolean isNetErr = msg.getData().getBoolean("isNetErr");
            if(mProgressDialog != null){
                mProgressDialog.dismiss();
            }
            if(isNetErr){
                Toast.makeText(MainActivity.this, "当前网络不可用", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(MainActivity.this, "错误的用户名或者密码", Toast.LENGTH_SHORT).show();
            }
        }
        
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mUser = (EditText) findViewById(R.id.userEdit);
        mPwd = (EditText) findViewById(R.id.pwdEdit);
        
        mSumbit = (Button) findViewById(R.id.logBtn);
        mSumbit.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    
    @Override
    protected void onDestroy() {
        if(mProgressDialog != null){
            mProgressDialog.dismiss();
        }
        super.onDestroy();
    }

    @Override
    public void onClick(View v) {
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setMessage("正在登录,请稍等...");
        mProgressDialog.show();  
        user = mUser.getText().toString();
        pwd = mPwd.getText().toString();
        if(validateInfo(user, pwd)){
            Thread loginThread = new Thread(new LoginHandler());
            loginThread.start();
        }
    
    }

    private boolean validateInfo(String user, String pwd) {
        if("".equals(user)){
            mProgressDialog.dismiss();
            Toast.makeText(MainActivity.this, "用户名不能为空", Toast.LENGTH_SHORT).show();
            //setMsg("isEmptyUser");
            return false;
        }
        if("".equals(pwd)){
            mProgressDialog.dismiss();
            Toast.makeText(MainActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show();
            //setMsg("isEmptyPwd");
            return false;
        }
        return true;
    }

    private void setMsg(String msg, boolean isHas){
        Message message = new Message();
        Bundle bundle = new Bundle();
        bundle.putBoolean(msg, isHas);
        message.setData(bundle);
        loginHandler.sendMessage(message);
    }
    
    private void setInfo(JSONObject obj) {
        SharedPreferences sp = this.getSharedPreferences("userInfo", MODE_APPEND);
        Editor edit = sp.edit();
        try {
            edit.putString("LOGIN_NAME", obj.getString("login_name"));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        edit.commit();
    }
    
    /**
     * loginState 0(无网络) 1(帐号密码错误) 2(成功)
     * @param params
     * @param serverPath
     * @return
     */
    private int validateLogin(Map<String, String> params, String serverPath){
        int loginState = 0;
        HttpResponse response = HttpUtil.getHttpResonse(serverPath, params, Constant.ENCODING);
        if(null != response){
            if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                IOUtil ioUtil = new IOUtil();
                try {
                    String resultJson = ioUtil.getJson(response.getEntity().getContent());
                    JSONObject jsonObject = new JSONObject(resultJson);
                    boolean isSuccess = jsonObject.getBoolean("success");
                    if(isSuccess){
                        //Result r = JSONArray.parseObject(resultJson, Result.class);
                        //if(r.isSuccess()){
                            //setInfo(r);
                        //}
                        JSONObject userJson = jsonObject.getJSONObject("data").getJSONObject("user");
                        setInfo(userJson);
                        loginState = 2;
                    }else{
                        loginState = 1;
                    }
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }else{
                loginState = 0;
            }
        }
        return loginState;
    }
    
    class LoginHandler implements Runnable {

        @Override
        public void run() {
            String serverPath = Constant.LOGINURL;
            Map<String, String> params = new HashMap<String, String>();
            params.put("username", user);
            params.put("password", pwd);
            int status = validateLogin(params, serverPath);
            if(status == 0){
                setMsg("isNetErr", true);
            }else if(status == 1){
                setMsg("isNetErr", false);
            }else if(status == 2){
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, ShowActivity.class);
                startActivity(intent);
                finish();
            }
        }
        
    }
}

 

HttpClient封装:

package com.tp.soft.http;

import java.net.SocketTimeoutException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;

import android.util.Log;

/**
 * httpClient封装
 * @author taop
 *
 */
public class HttpUtil {
    public static HttpResponse getHttpResonse(String serverPath, Map<String, String> params, String encoding){
        List<NameValuePair> pairs = new ArrayList<NameValuePair>();
        if(null != params && !params.isEmpty()){
            for(Map.Entry<String, String> entry : params.entrySet()){
                pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
            }
        }
        
        HttpResponse response = null;
        try{
            HttpPost post = new HttpPost(serverPath);
            post.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8));
            response = getHttpClient().execute(post);
        }catch (ConnectTimeoutException e) {
            Log.e("提示", "连接超时");
            return null;
        } catch (SocketTimeoutException e) {
            Log.e("提示", "Socket连接超时");
            return null;
        } catch (Exception e) {
            Log.e("提示", e.getLocalizedMessage());
            return null;
        }
        
        return response;
    }
    
    public static HttpClient getHttpClient() {
        BasicHttpParams httpParams = new BasicHttpParams();
        ConnManagerParams.setTimeout(httpParams, 1000);
        /* 连接超时 */
        HttpConnectionParams.setConnectionTimeout(httpParams, 3000);// 设置请求超时3秒钟
        /* 请求超时 */
        HttpConnectionParams.setSoTimeout(httpParams, 3000);// 设置等待数据超时时间3秒钟
        HttpClient client = new DefaultHttpClient(httpParams);
        return client;
    }
}

IO封装:

package com.tp.soft.io;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class IOUtil {
    public String getJson(InputStream is){
        String jsonData = "";
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String resData = "";
        try {
            while((resData=br.readLine())!=null){
                jsonData += resData;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                br.close();
                isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return jsonData;
    }
}

Constant类:

package com.tp.soft.util;

public class Constant {
    public final static String ENCODING = "UTF-8";
    public final static String SERVER_PATH = "http://xxx.xxx.xxx.xxx:8081/wsTest1/ws/rest/";
    public final static String LOGIN_METHOD = "login";
    public final static String LOGINURL = SERVER_PATH + "loginService/" + LOGIN_METHOD;
}

服务器用的是rest版的webservice

代码:

package com.tp.soft.web.ws.impl;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.Resource;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.apache.log4j.Logger;
import org.springframework.dao.DataAccessException;

import com.tp.soft.web.common.entity.Result;
import com.tp.soft.web.common.exception.BaseServiceException;
import com.tp.soft.web.common.util.Constant;
import com.tp.soft.web.dao.LoginDao;
import com.tp.soft.web.entity.po.AuUser;
import com.tp.soft.web.entity.vo.AuUserVo;
import com.tp.soft.web.ws.LoginService;

@Path("/loginService")
public class LoginServiceImpl implements LoginService{

    private static final Logger LOG = Logger.getLogger(LoginServiceImpl.class);

    @Resource(name="loginDao")
    private LoginDao loginDao;
    
    @POST
    @Path(value="/login")
    @Produces(MediaType.APPLICATION_JSON)
    public Result doLogin(@FormParam(value="username") String username, @FormParam(value="password") String password) {
        Result result = new Result();
        AuUserVo auUserVo = new AuUserVo();
        auUserVo.setLogin_name(username);
        AuUser auUser;
        try{
            auUser = loginDao.findUser(auUserVo);
        }catch (DataAccessException e) {
            LOG.error("【ibatis】登录异常", e);
            throw new BaseServiceException(e.getLocalizedMessage());
        }
        
        if(null == auUser){
            result.setErrMsg(Constant.LOGIN_NAME_ERROR);
        }else if(!password.equals(auUser.getLogin_pwd())){
            result.setErrMsg(Constant.LOGIN_PWD_ERROR);
        }else{
            result.setSuccess(true);
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("user", auUser);
            result.setData(map);
        }
        
        return result;
    }

}

dao里面就是ibatis调用数据库 这边就不贴了

上一篇: Break 、Continue 和ReadOnly、Const和Ref和Out params 下一篇: 没有下一篇了!
发表评论
用户名: 匿名