`
gintama
  • 浏览: 51637 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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);
	}

}
分享到:
评论

相关推荐

    Android客户端与服务器端的json数据交互(服务端客户端).zip

    本资料“Android客户端与服务器端的json数据交互(服务端客户端)”将深入探讨如何在Android应用中实现这一功能。 一、JSON简介 JSON是一种独立于语言的数据交换格式,它基于ECMAScript的一个子集,易于人阅读和编写...

    057集-Android客户端与服务端交互-服务端代码

    在本节"057集-Android客户端与服务端交互-服务端代码"的视频教程中,我们将深入探讨Android应用程序如何与服务端进行有效且安全的通信,这对于开发任何涉及网络功能的Android应用来说都是至关重要的。这个教程针对的...

    安卓客户端与服务端交互源代码(包括安卓端和web端)

    在IT行业中,客户端和服务端交互是应用程序开发的核心部分,特别是在移动应用开发中,如安卓客户端。这个主题涉及到了客户端(Android应用)如何通过网络通信与服务端(通常为Web服务器)进行数据交换,以实现功能如...

    android使用JSON进行网络数据交换%28服务端、客户端%29的实现

    本篇将详细介绍如何在Android中使用JSON进行服务端和客户端的数据交换。 首先,了解JSON的基本结构。JSON是一种基于文本的格式,主要由键值对组成,可以表示数组和对象。对象以大括号{}包围,键值对之间用逗号分隔...

    android使用JSON进行网络数据交换(服务端、客户端)的实现-IT计算机-毕业设计.zip

    本项目"android使用JSON进行网络数据交换(服务端、客户端)的实现"旨在为学生提供一个完整的示例,帮助他们理解和掌握如何在Android平台上通过JSON与服务器进行数据通信。以下是对该项目涉及的知识点的详细解释: 1....

    安卓聊天室系统源码(服务端+客户端)+测试图样

    3. **数据序列化与反序列化**:在传输过程中,数据通常需要被序列化为JSON或XML格式,因此需要了解Gson、Jackson或Fastjson等库的使用,以便于将对象转换为字符串进行传输,并在接收端反序列化回对象。 4. **消息推...

    Android客户端与服务器端的json数据交互(内含大量知识点)

    在Android客户端与服务器端的JSON数据交互中,开发者通常会涉及到多个关键知识点,这些知识点是构建现代移动应用不可或缺的部分。以下是对这些知识点的详细说明: 1. JSON(JavaScript Object Notation):JSON是一...

    android客户端连接服务器交互实例

    Android提供了Gson库用于JSON对象和Java对象之间的转换,也可以使用org.json库进行手动解析。 服务器返回的数据,Android客户端需要解析后才能使用。对于JSON数据,我们可以使用Gson或Jackson库将其转化为Java对象...

    Android 仿QQ客户端及服务端源码.zip

    这个项目涵盖了 Android 客户端与服务端的交互,涉及到了多个关键知识点,包括但不限于以下几个方面: 1. **Android 开发基础**:首先,你需要熟悉 Android 应用的基本架构,如 Activity、Fragment、Intent 以及 ...

    Android访问WCF服务源码(Android 客户端)

    为了提高性能和用户体验,可以使用异步请求,如使用AsyncTask或Handler。同时,考虑使用缓存策略,减少不必要的网络请求。 8. **安全考虑** 当涉及到敏感数据交换时,务必使用HTTPS协议以保证数据的安全性。同时...

    Android客户端和服务器端数据交互Demo03.zip

    如果使用Gson,只需定义对应的Java模型类,Gson就能自动将JSON转换为对象。 此外,错误处理也是不可或缺的部分。网络请求可能会出现各种问题,如网络连接失败、超时、服务器错误等。开发者通常会使用try-catch语句...

    安卓listview相关相关-android客户端请求.netWeb服务端请求后的数据json解析展示在listview上.rar

    本示例项目"安卓listview相关相关-android客户端请求.netWeb服务端请求后的数据json解析展示在listview上.rar"聚焦于如何从.NET Web服务获取JSON数据,并在Android客户端的ListView中进行解析和展示。以下是关于这一...

    android之客户端从服务端解析数据及上传与反馈数据

    在Android开发中,客户端与服务端之间的数据交互是应用程序的核心部分。这个过程涉及到网络通信、数据解析、数据上传以及服务端的反馈处理。本篇将深入探讨这些关键知识点。 首先,客户端与服务端的通信通常基于...

    Android程序研发源码Android 仿QQ客户端及服务端源码.zip

    在学习这个源码时,开发者可以深入了解Android客户端与服务端的交互过程,理解网络通信协议,提升数据库操作和JSON处理能力,同时也能掌握服务器端的开发流程。这对于提升Android应用开发的整体水平是非常有帮助的。...

    Android代码-仿QQ客户端及服务端源码.zip

    4. 异步处理:为了保证用户体验,客户端使用异步任务(AsyncTask)、Handler或Retrofit等工具进行后台操作,如网络请求、数据加载等。 二、服务端设计与实现 1. 服务器架构:仿QQ服务端可能采用了基于Socket编程的...

    android客户端与后台服务器交互demo

    6. **Android异步处理**:为了防止网络操作阻塞UI线程,Android客户端通常使用AsyncTask、Handler、IntentService或现代的LiveData和Coroutines等机制来执行网络请求。这些方法可以在后台线程中执行耗时任务,确保...

    Android高级应用源码-通过Android客户端访问web服务器,实现一个登录功能,服务端+数据库+安卓端

    可以使用`Gson`、`Jackson`或者`org.json`库来完成JSON的解析工作。 3. **UI设计**:登录界面的构建通常涉及`XML`布局文件,使用`EditText`控件获取用户输入,`Button`触发登录事件,配合`AlertDialog`显示登录结果...

    android客户端和服务端的连接

    在Android应用开发中,客户端和服务端的连接是实现数据交互的关键环节。这个小型的网络服务器与安卓客户端的连接示例可能涵盖了HTTP、HTTPS协议、WebSocket、Socket编程等基础概念。以下将详细介绍这些知识点: 1. ...

Global site tag (gtag.js) - Google Analytics