学习来源:网易云课堂《Android Client与Service的数据交互》
这两天在学习客户端与服务器的交互,简单做了登陆功能。
#准备工作:
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();
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------
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
这个类我之前的博客中也用来实现过异步加载显示图片的操作。挺好用的,其实底层页封装了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 params = new ArrayList();
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轨迹等。