背景:
使用Servlet技术实现服务端,使用Android平台作为客户端,实现一个个人店铺,店铺商品不限。功能要求如下:
1. 提供登录、注册功能 ;
2. 首页面包括“商品列表”子页面、“订单”子页面和“我的”子页面;
3. 在商品列表页点击某个商品列表项可跳转到该商品的详情页面,在商品详情页面可以实现加入购物车和购买操作;商品数据来自于服务端;
4. 订单页显示个人的订单历史记录(每个订单显示订单日期、订单总价格),点击某个订单项,可跳转到订单详情页(显示订单中的商品列表,包括商品名称、单价、数量以及订单总价格);
5. 提供购物车页面,能够对购物车中的商品进行编辑:数量的增减、商品的删除、总价格的计算等;
6. 实现我的页面,能够维护个人信息;
7. 服务器端仅需提供接口,不需实现可视化的界面;
话不多说先看效果图,包含购物车功能 如需详细代码请移步vx :sredxc
安卓展示: vx :sredxc
登录部分代码从后端获取
vx :sredxc
regist.setOnClickListener(v -> {
Intent intent = new Intent(this, RegiestActivity.class);
startActivity(intent);
});
login.setOnClickListener(v -> {
if (user.getText().toString().isEmpty()){
Toast.makeText(this, "账号不可以为空!", Toast.LENGTH_SHORT).show();
}else if (pwd.getText().toString().isEmpty()){
Toast.makeText(this, "密码不可以为空!", Toast.LENGTH_SHORT).show();
}else {
JSONObject jsonObject=new JSONObject();
try {
jsonObject.put("username", user.getText().toString());
jsonObject.put("password", pwd.getText().toString());
} catch (JSONException e) {
e.printStackTrace();
}
mPresenter.startpostInfoJsonToken(Constant22.BASE_Login, LoginBean.class, jsonObject.toString(),"");
}
});
在请求成功后做登录操作
if(o instanceof LoginBean){
if(((LoginBean) o).getStatus()==200){
SPUtils.putString2SP("user",user.getText().toString());
SPUtils.putString2SP("pwd",pwd.getText().toString());
SPUtils.putString2SP("user_id",((LoginBean) o).getData().getUser_id()+"");
Toast.makeText(this, ((LoginBean) o).getMessage(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(ZhiWenActivity.this,StartActivity.class);
startActivity(intent);
finish();
}else {
Toast.makeText(this, ((LoginBean) o).getMessage(), Toast.LENGTH_SHORT).show();
}
}
这里是部分适配器代码,用于展示购物车逻辑和展示
holder.name.setText(list.get(position).getPname());
holder.remark.setText(list.get(position).getDesc());
holder.sum.setnumbet(list.get(position).getProduct_num());
holder.sum.setAddCall(new Addnet.AddCall() {
@Override
public void onClick(int number) {
shopCallBack.addin(1,position,number);
}
});
holder.price.setText(list.get(position).getPrice()+"元");
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
shopCallBack.onClick(position);
return false;
}
});
holder.small_check.setChecked(list.get(position).isCheck());
holder.small_check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean stu = list.get(position).isCheck();
shopCallBack.smallidnex(1,position,stu);
}
});
接口介绍:
本项目部署在公网,安卓请求数据为数据库中数据,servlet后台也已经部署在公网
servlet使用ecplise+apache进行开发
servlet后台代码:
登录servlet
public class userLogin extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//0、解决返回中文乱码问题
resp.setCharacterEncoding("UTF-8");
JSONObject web_dict = JsonObjectWeb.getJsonInfoDict(req);
String username = web_dict.getString("username");
String password = web_dict.getString("password");
User user = new User();//创建user对象
user.setUsername(username);
user.setPassword(password);
注册servlet
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决返回中文乱码问题
resp.setCharacterEncoding("UTF-8");
JSONObject web_dict = JsonObjectWeb.getJsonInfoDict(req);
String username = web_dict.getString("username");
String password = web_dict.getString("password");
User user = new User();//创建user对象
user.setUsername(username);
user.setPassword(password);