Android开发一客户端与服务器交互(登陆功能)

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">学习来源:网易云课堂《Android Client与Service的数据交互》</span>

这两天在学习客户端与服务器的交互,简单做了登陆功能。

#准备工作:

1, 搭建JavaEE开发环境,下载对应eclipse

2, 安装Tomcat

3, 安装tomcat eclipse插件,http://www.eclipsetotale.com/tomcatPlugin/


#直接开始:

1, 新建dynamic web project, 一路默认吧

2, 根据课程指导,将tomcat-->lib文件夹下的三个文件放到工程目录(WebContent-->lib)中:

* el-api.jar; jsp-api.jar; servlet-api.jar

3, src文件夹下,新建包和类,类LoginServlet4Android扩展HttpServlet

新建以后就会有,两个主要的实现方法==========================


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("---get---");
		this.doPost(request, response);
	}

	/**
	 *  URL?para1=value1 2=value2&...
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		// 
		
		//
		request.setCharacterEncoding("UTF-8");
		
		//
		String loginName = request.getParameter("LoginName");
		String loginPassWord = request.getParameter("LoginPassWord");
		
		/**
		 * text/html
		 */
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8"); 
		PrintWriter out = null;
		/**
		 * Login logical judge
		 */
		DataOutputStream output = new DataOutputStream(response.getOutputStream());
		try{
			out = response.getWriter();
			if(loginName.equals("sun") && loginPassWord.equals("011"))
			{
				//right to client  response..
				output.writeUTF("server data: success!");
				output.writeInt(1);
			}
			else
			{
				//wrong
				output.writeUTF("server data: fail!");
				out.print("failed");
			}
		}
		finally
		{
			if(out != null)
				out.close();
			if(output != null)
				output.close();
		}
		
	}

服务器端的代码比较简单,主要在doPost中接收数据,并验证。后期希望能有一个数据库存放相应的数据。

------------------------------------------------------------------------------------------------------------------------------------------------------

Android端的实现:

package com.example.service;

import java.lang.ref.WeakReference;

import com.example.mapsun.LoginActivity;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;

public class LoginAsyncTask extends AsyncTask<Object, Object, Object> {

	boolean result = true;
	String g_loginName, g_loginPassword;
	private final WeakReference<Activity> mActivity;
	private static ProgressDialog dialog;
	
	public LoginAsyncTask(LoginActivity activity, String loginName, String loginPassword)
	{
		g_loginName = loginName;
		g_loginPassword = loginPassword;
		mActivity = new WeakReference<Activity>(activity);
	}
	
	@Override  
    protected void onPreExecute() {  
		if(null == dialog){
			dialog = new ProgressDialog(mActivity.get());
		}
		dialog.setTitle("please wait");
		dialog.setMessage("Logining...");
		dialog.setCancelable(false);
		dialog.show();
    }  
	



	@Override
	protected Object doInBackground(Object... arg0) {
		// TODO Auto-generated method stub
		UserService userServ  = new UserServiceImpl();
		try {
			result = userServ.userLogin(g_loginName, g_loginPassword);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
	
	//
	protected void onPostExecute(Object result) {
        
        //获得服务器返回信息成功后
		String strMsg;
		if(result.equals(true))
		{
			strMsg = "success";
		}
		else
			strMsg = "failed";
		((LoginActivity)mActivity.get()).ShowTip(strMsg);
        //取消进度条
        dialog.cancel();
    }
}

这里实现了一个继承AsyncTask的类, 异步去发送服务器的请求,在构造函数中传递界面的一些参数,从而实现界面的一些变化。

这个类我之前的博客中也用来实现过异步加载显示图片的操作。挺好用的,其实底层页封装了Handler的一些操作。


好了,今天就粗略的贴一下这两天的实现代码,虽然Android手机还是不能访问电脑上的服务器,昨天还可以的。。


=======================补充:UserService的userLogin功能实现=============2014-12-10=============================

主要是接收服务器端的数据操作,代码如下:

package com.example.service;

public class UserServiceImpl implements UserService {

	private static final String TAG = "UserServiceImplement";
	
	@Override
	public boolean userLogin(String loginName, String loginPassword)
			throws Exception {
		// TODO Auto-generated method stub
		
		
		String result;
		HttpPost httpPost = new HttpPost(UriAPI.HTTPCustomer);
		
		//create params
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		params.add(new BasicNameValuePair("LoginName", loginName));
		params.add(new BasicNameValuePair("LoginPassWord", loginPassword));
		
		try{
			//encode data
			httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
			HttpResponse httpResp = new DefaultHttpClient().execute(httpPost);
			//get response 
			if (httpResp.getStatusLine().getStatusCode()==200) {
                             byte[] data =new byte[2048];
                             data =EntityUtils.toByteArray((HttpEntity)httpResp.getEntity());
                             ByteArrayInputStream bais = new ByteArrayInputStream(data);
                             DataInputStream dis = new DataInputStream(bais);
                             result=new String(dis.readUTF());
                                  Log.i("service result:", result);
                             return true;
            }
			
		}catch(ClientProtocolException e){  
            e.printStackTrace();  
        }catch(UnsupportedEncodingException e){  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
		return false;
	}
	


	public class UriAPI{
		//
		public static final String HTTPCustomer = "http://192.168.0.56:8080/firstweb/login.do";
	}
}


总结:登陆功能主要熟悉了服务端的HttpServlet的操作,其中还学习了Java web相关的一些基础,和Android客户端HttpPost的实现,回顾了了AsyncTask类,以及一些Android基本的内容,算是这个项目的开始吧。

另外,上述代码中存在很多细节问题,先放一放,后面会专注在Android客户端上的功能实现,包括界面布局,拍照功能,GPS轨迹等。



















首先这个代码也是从别人那里下载的 但刚开始不能正确运行 通过自己的调试以后 可以正确运行 想在这里分享出来 帮助更多刚入门的同学 在这里想说一些自己的经验 来帮助大家可以更好的运行代码 主要包括两个文件夹: 一是HttpClient文件夹 是安卓客户端代码 要安装安卓环境才能正确运行 二是HelloSevlet文件夹 是安卓的服务器代码 在这个文件夹里只有Myserver java是通信用的 HelloWorldServlet java是用来测试用的 在这里说明几个在调试和测试过程中的关键点: HttpClient文件夹不多说了 安装了安卓环境都可以正确运行起来 主要说说服务器端 HelloSevlet文件夹 这个文件夹在运行时可以在本地的Apache服务器上部署 也可以在真正的服务器上部署 不管在哪部署 部署以后 通过http: ip:8080 Myserver来访问 如果在本地的IE上能访问 说明可以正确使用 如果在本地的IE都不能访问 说明路径还是有问题 还要再重新配置 当服务器端能够正确的在Apache上部署和运行以后 再通过安卓客户端代码访问 则可以正确通信了 PS: 代码里的服务器地址 要换成本地跑的服务器地址才可以 一般为127 0 0 1 ">首先这个代码也是从别人那里下载的 但刚开始不能正确运行 通过自己的调试以后 可以正确运行 想在这里分享出来 帮助更多刚入门的同学 在这里想说一些自己的经验 来帮助大家可以更好的运行代码 主要包括两个 [更多]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值