首页 > 代码库 > 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=http://www.mamicode.com/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=http://www.mamicode.com/"username") String username, @FormParam(value=http://www.mamicode.com/"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调用数据库 这边就不贴了
android线程登录
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。