android 仿微信demo————微信启动界面实现

android 仿微信demo————注册功能实现(移动端)

android 仿微信demo————注册功能实现(服务端)

android 仿微信demo————登录功能实现(移动端)

android 仿微信demo————登录功能实现(服务端)

android 仿微信demo————微信主界面实现

android 仿微信demo————微信消息界面实现(移动端)

android 仿微信demo————微信消息界面实现(服务端)

android 仿微信demo————微信通讯录界面功能实现(移动端,服务端)

android 仿微信demo————微信发现界面实现

android 仿微信demo————微信顶部操作栏界面实现

android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

android 仿微信demo————微信顶部操作栏加号按钮实现(弹出子菜单)

android 仿微信demo————注册功能完善添加头像功能(移动端)

源码获取点我,记得给个start哦

服务端

在web层中创建Image Servlet,用于接受客户端传输过来的图片数据
Image.java

package com.example.controller;import com.example.util.ChangeImage;import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;@WebServlet(name = "Image", value = "/Image")
public class Image extends HttpServlet {public static ImageIcon ii; //图片猴嘴byte[] imageByte;public static String headUrl; //图片绝对路径@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置字符编码,防止中文乱码request.setCharacterEncoding("utf-8");response.setCharacterEncoding("UTF-8");response.setContentType("application/json;charset=UTF-8");System.out.println(request.getContentType());// 得到客户端发送过来内容的类型,application/json;charset=UTF-8System.out.println(request.getRemoteAddr());// 得到客户端的ip地址,//返回套接字具有关联的通道输入流,则得到的输入流会将其所有操作委托给通道InputStream in=request.getInputStream();//将输入流按照下面方式处理, 根据Iterator<ImageReader> itImage是否能//成功的返回一个ImageReader对象确认该流文件是否是一个图片文件!//并ImageReader类中的getFormatName()得到文件的格式!//通过最后可以通过ImageIcon的byte[]构造函数建立ImageIcon对象!ImageInputStream iis = ImageIO.createImageInputStream(in);Iterator<ImageReader> itImage = ImageIO.getImageReaders(iis);if(itImage.hasNext()){ImageReader reader = itImage.next();imageByte = new byte[102400*10];iis.read(imageByte);ii = new ImageIcon(imageByte, reader.getFormatName());}//存储路径headUrl = "C:\\Users\\Administrator\\IdeaProjects\\" +"AndroidServer1\\src\\main\\webapp\\imgs\\contact\\" + Reigister.number  + "." + ii;FileOutputStream fos=new FileOutputStream(headUrl);fos.write(imageByte); //写文件fos.close();//创建改变图片大小的工具类对象ChangeImage changeImage = new ChangeImage();try{BufferedImage originalImage = ImageIO.read(new File(headUrl));int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();BufferedImage resizeImageJpg = changeImage.resizeImage(originalImage, type);ImageIO.write(resizeImageJpg, "jpg", new File(headUrl));BufferedImage resizeImagePng = changeImage.resizeImage(originalImage, type);ImageIO.write(resizeImagePng, "png", new File(headUrl));BufferedImage resizeImageHintJpg = changeImage.resizeImageWithHint(originalImage, type);ImageIO.write(resizeImageHintJpg, "jpg", new File(headUrl));BufferedImage resizeImageHintPng = changeImage.resizeImageWithHint(originalImage, type);ImageIO.write(resizeImageHintPng, "png", new File(headUrl));}catch(IOException e){System.out.println(e.getMessage());}}
}

上面代码接受客户端传输过来的数据并判断是否为图片数据且获得图片的后缀,之后以绝对路径方式写入文件。还有一个改变图片大小的工具(后面会给出),由于用户传输图片可能大小会不一样,所以需要修改统一

创建修改图片工具类ChangeImage.java

ChangeImage.java

package com.example.util;import java.awt.*;
import java.awt.image.BufferedImage;public class ChangeImage {private static final int IMG_WIDTH = 120;private static final int IMG_HEIGHT = 120;public static BufferedImage resizeImage(BufferedImage originalImage, int type) {BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);Graphics2D g = resizedImage.createGraphics();g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);g.dispose();return resizedImage;}public static BufferedImage resizeImageWithHint(BufferedImage originalImage, int type) {BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);Graphics2D g = resizedImage.createGraphics();g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);g.dispose();g.setComposite(AlphaComposite.Src);g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);return resizedImage;}
}

由于存储的图片名称是微信号,所以要在Reigister Servlet把微信号私有变量改成公共的静态变量,这样在其他Servlet中就可以使用了

修改user实体类,添加头像实体
User.java

package com.example.pojo;public class User {private int id;private String number;private String name;private String password;private String phone;private String remark;private String headimg;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public String getHeadimg() {return headimg;}public void setHeadimg(String headimg) {this.headimg = headimg;}@Overridepublic String toString() {return "User{" +"id=" + id +", number='" + number + '\'' +", name='" + name + '\'' +", password='" + password + '\'' +", phone='" + phone + '\'' +", remark='" + remark + '\'' +", headimg='" + headimg + '\'' +'}';}
}

在dao层的注册方式添加一条sql语句给contact表插入一条用户记录,因为每一个用户在contact都要有对应的一条记录,由于新注册的用户没有联系人,但是通讯录要显示自己,所以要把自己的头像,昵称插入数据库中,之后给注册的sql语句添加一个字段(头像url路径)即可
UserDaoImpl.java

       //i如果操作成功,就是操作成功的条数int i = JDBCUtil.executeUpdate(sql, number, name, phone, password, "1", "http://100.2.178.10:8080/" +"AndroidServer1_war_exploded/imgs/contact/" + Reigister.number + "." + "png");if (i > 0) {String sql1 = "insert into contact (img, name, number) values(?,?,?);";int i1 = JDBCUtil.executeUpdate(sql1, "http://100.2.178.10:8080/" +"AndroidServer1_war_exploded/imgs/contact/" + Reigister.number + "." + "png", name, Reigister.number);}

在数据库用户表user添加一个头像路径字段

测试

因为新注册的用户,微信消息在数据库中为空,通讯录只有自己一条记录

android 仿微信demo————注册功能完善添加头像功能(服务端)相关推荐

  1. android 仿微信demo————注册功能完善添加头像功能(移动端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  2. android 仿微信demo————注册功能实现(服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  3. android点击加号,Android仿微信朋友圈点击加号添加图片功能

    本文为大家分享了类似微信朋友圈,点击+号图片,可以加图片功能,供大家参考,具体内容如下 xml: xmlns:app="http://schemas.android.com/apk/res- ...

  4. android 仿微信demo————登录功能实现(服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  5. android 仿微信demo————微信通讯录界面功能实现(移动端,服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  6. android 仿微信demo————登录功能实现(移动端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  7. android 仿微信demo————微信主界面实现

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  8. android 仿微信demo————微信消息界面实现(服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  9. android 仿微信demo————微信顶部操作栏界面实现

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

最新文章

  1. 纷纷布局的全光网,是你所熟知的吗?
  2. mysql 多个unique key_[MySQL]MySQL 中通过使用UNIQUE KEY 来控制字段值不重复的问题.
  3. 转 使用DCloud+Framework7制作移动APP应用
  4. 2-zookeeper、ha
  5. 容器编排技术 -- Kubernetes kubectl rollout undo 命令详解
  6. java逻辑判断_阿里JAVA开发强制要求的10条条件控制及逻辑判断的规范,切记
  7. Thymeleaf的学习
  8. Rational.Rose7.0系统软件
  9. 微型计算机系统评课,微机课评课稿.doc
  10. DNS域名管理系统与LAMP编译安装
  11. HighCharts图标中隐藏x/y轴坐标
  12. JavaScript名词shim与polyfill
  13. 如何使用Dareboost改善网站性能(和转化)
  14. java操作hfds----刘雯丽
  15. elasticsearch - 节点、集群分片及副本、CRUD
  16. 动态贴纸是通过什么技术实现的?为什么能火爆至今?
  17. 图像处理之Matlab图像读取
  18. Python爬虫爬取某小说网的教程(含全代码)#大佬勿喷
  19. python输出字符串中的大写字母_如何在python中查找字符串中的大写字母
  20. ijkplayer视频解码播放架构分析

热门文章

  1. HTTPS之acme.sh申请证书
  2. 1.CND技术详解---引言
  3. Android Service---在前台运行服务
  4. android弹出对话框
  5. python写手机脚本脱离电脑_在手机里编写python脚本控制手机
  6. 定时器(setTimeout()和setInterval())的清除问题
  7. 柯朗微积分与数学分析习题选解(1.1 节 a)
  8. 【转载】一个硕士程序员的求婚日记——做开发的不是木头人!
  9. 记录vue预渲染prerender-spa-plugin踏坑
  10. delphi文件操作