handler的使用、服务端客户端交互、Json、Gson

附件有完整代码

登录界面:


登录的Activity:
package com.example.knowledgedemo;

import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.entity.loginPerson;
import com.example.utils.HttpUtil;
import com.example.utils.ToastUtil;
import com.google.gson.Gson;

/**
 * 知识点:handler的使用、服务端客户端交互、Json、Gson、
 * @author somebody
 * 
 */
public class LoginDemo extends Activity {

	private EditText loginname, password;
	private Button login;
	private ProgressDialog progressdialog;
	private String name, pwd;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		loginname = (EditText) findViewById(R.id.loginname);
		password = (EditText) findViewById(R.id.password);
		login = (Button) findViewById(R.id.login);
		login.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				login();//点击登录按钮
			}
		});
	}

	private void login() {
		showProgressDialog();//显示进度框
		new Thread() {
			public void run() {
				requestServer();//请求服务器
			}
		}.start();
	}

	private void showProgressDialog() {
		if (progressdialog == null) {
			progressdialog = new ProgressDialog(this);
		}
		if (progressdialog.isShowing()) {
			progressdialog.dismiss();
		}
		progressdialog.setTitle("提示");
		progressdialog.setMessage("正在登陆..");
		progressdialog.show();
	}
	
	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			progressdialog.dismiss();
			switch (msg.what) {
			case 0:
				ToastUtil.longToast(getApplicationContext(),
						R.string.network_ok);//Toast 提示信息、登录成功
				break;
			case 1:
				ToastUtil.longToast(getApplicationContext(),
						R.string.network_not_ok);//登录失败
				break;
			case 2:
				ToastUtil.longToast(getApplicationContext(),
						R.string.network_not_ok);//TimeOut 网络连接失败
				break;
			default:
				break;
			}
		}
	};

	private void requestServer(){
		name = loginname.getText().toString();
		pwd = password.getText().toString();//获取用户名密码
		loginPerson person = new loginPerson();
		person.setLoginName(name);
		person.setPassWord(pwd);
		Gson g = new Gson();
		/*
		 * Gson将person对象转换为Json格式的字符串
		 * 此时obj = {"loginName":"1","passWord":"1"}
		 * */
		String obj = g.toJson(person);
		String result = HttpUtil.httpPostCodeParams("login",obj);//请求服务端、获取返回值
		JSONObject resultObject;
		if(result.startsWith("TimeOut")||result.length()==0){
			handler.sendEmptyMessage(2);//请求服务端超时
		}else{
			try {
				//如果不超时、返回的数据格式  {"result":"0"}
				resultObject = new JSONObject(result);
				result = resultObject.getString("result");
			} catch (JSONException e) {
				e.printStackTrace();
			}
			if(result.equals("0")){
				handler.sendEmptyMessage(0);//登录成功
			}else if(result.equals("1")){
				handler.sendEmptyMessage(1);//登录失败
			}
		}
		
	}
	
}


存放用户名密码的LoginPerson对象:
package com.example.entity;

public class LoginPerson {

	private String loginName;

	private String passWord;

	public String getLoginName() {
		return loginName;
	}

	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}

}

请求服务端的方法:
package com.example.utils;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL;

public class HttpUtil {

	/**
	 * 传递命令和参数
	 * 
	 * @param postCode
	 * @param obj
	 * @return
	 */
	public static String httpPostCodeParams(String postCode, String obj) {
		StringBuilder sbResponse = new StringBuilder();
		URL url;
		try {
			//请求的url = http://10.33.1.204:8888/KnowledgeManagementServer/Servlet/ 加  postCode
			//服务端ip、端口、服务端项目名、服务端使用servlet+命令的方式响应请求
			url = new URL(getUrl(postCode));
			
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("POST");
			conn.setReadTimeout(Constants.connectTimeout);
			conn.setConnectTimeout(Constants.connectTimeout);
			conn.setDoOutput(true);
			conn.setDoInput(true);
			DataOutputStream outStream = new DataOutputStream(
					conn.getOutputStream());
			outStream.writeUTF(obj.toString());
			outStream.flush();
			outStream.close();

			int cah = conn.getResponseCode();
			if (cah != 200) {
				return "TimeOut";
			}
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					conn.getInputStream(), "utf-8")); 
			String lines;
			while ((lines = reader.readLine()) != null) {
				sbResponse.append(lines);
			}
			conn.disconnect();

		} catch (SocketTimeoutException e) {
			return "TimeOut";
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sbResponse.toString();
	}

	private static String getUrl(String postCode) {
		return Constants.server + postCode;
	}

}


Servlet相应类:
package com.ck.servlet;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ck.entity.LoginPerson;
import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class LoginServlet extends HttpServlet{
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html");
		resp.setCharacterEncoding("utf-8");
		PrintWriter out = resp.getWriter();

		DataInputStream dis = new DataInputStream(req.getInputStream());
		String param = dis.readUTF();
		Gson g = new Gson();
		LoginPerson person = g.fromJson(param, LoginPerson.class);
		JsonObject jsonObject = new JsonObject();
		if(person.getLoginName().equals("1")&&person.getPassWord().equals("1")){
			jsonObject.addProperty("result", "0");
		}else{
			jsonObject.addProperty("result", "1");
		}
		//{"result":"0"}
		out.print(jsonObject.toString());
		out.flush();
		out.close();
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}

}

猜你喜欢

转载自gintama.iteye.com/blog/1750079