在这里插入图片描述

  • 聊天布局的实现
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:background=“@drawable/background”

android:orientation=“vertical” >

<RelativeLayout

android:id=“@+id/top”

android:layout_width=“match_parent”

android:layout_height=“50dp”

android:background=“#3A4449” >

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_centerInParent=“true”

android:text=“小洛”

android:textColor=“#ffffff”

android:textSize=“18sp” />

<RelativeLayout

android:id=“@+id/chat_bottom”

android:layout_width=“match_parent”

android:layout_height=“55dp”

android:layout_alignParentBottom=“true”

android:background=“#3A4449” >

<EditText

android:id=“@+id/chat_input_message”

android:layout_width=“240dp”

android:background=“@drawable/downborder”

android:layout_height=“50dp”

android:layout_centerVertical=“true”

android:layout_marginRight=“5dp”

android:gravity=“center” />

<Button

android:background=“@drawable/buttonborder”

android:id=“@+id/send”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_alignParentRight=“true”

android:layout_centerVertical=“true”

android:layout_toRightOf=“@id/input_message”

android:text=“发送”

android:textColor=“#FFFFFF”

android:textSize=“18sp” />

<ListView

android:id=“@+id/listview”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:layout_above=“@id/chat_bottom”

android:layout_below=“@id/chat_top”

android:divider=“@null”

android:dividerHeight=“3dp” >

在这里插入图片描述

  • 配置自己的图灵机器人

public class MyRobot {

public static final String URL_KEY = “http://www.tuling123.com/openapi/api”;//获取图灵机器人官网地址

public static final String API_KEY = “044a24e728164414ba63c3efb1b3b9e9”;//此处是你申请的图灵机器人apikey

}

  • 聊天信息的实体类

import java.util.Date;

public class ChatMessage {

private String name;// 名字

private String message;//聊天信息

private Type type;// 类型

private Date date;// 时间

public ChatMessage() {

}

public ChatMessage(String message, Type type, Date date) {

super();

this.message = message;

this.type = type;

this.date = date;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

public Type getType() {

return type;

}

public void setType(Type type) {

this.type = type;

}

public Date getDate() {

return date;

}

public void setDate(Date date) {

this.date = date;

}

public enum Type {

INCOUNT, OUTCOUNT

}

}

  • 请求消息返回内容的实体类

public class Result {

private int code; // code码

private String text; // 信息

public int getCode() {

return code;

}

public void setCode(int code) {

this.code = code;

}

public String getText() {

return text;

}

public void setText(String text) {

this.text = text;

}

}

  • 网络请求类

import com.google.gson.Gson;//Google Gson包

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.util.Date;

public class HttpRequest {

public static ChatMessage sendMessage(String message) {

ChatMessage chatMessage = new ChatMessage();

String gsonResult = doGet(message);//连接请求的内容

Gson gson = new Gson();

Result result = null;

if (gsonResult != null) {

try {

result = gson.fromJson(gsonResult, Result.class);//从json数据(json格式字符串)转为java对象(解析数据)

chatMessage.setMessage(result.getText());//http连接获取的内容解析之后的结果给聊天信息赋值

}

catch (Exception e) {

chatMessage.setMessage(“请求错误…”);

}

}

chatMessage.setDate(new Date());

chatMessage.setType(ChatMessage.Type.INCOUNT);

return chatMessage;

}

public static String doGet(String message) {

String result = “”;

String url = setParmat(message);

System.out.println("------------url = " + url);

InputStream input = null;

ByteArrayOutputStream output = null;

try {

//创建URL实例,打开URLConnection 创建连接

URL urls = new URL(url);

HttpURLConnection connection = (HttpURLConnection) urls.openConnection();

//设置Connection参数

connection.setReadTimeout(5 * 1000);//读取超时

connection.setConnectTimeout(5 * 1000);//连接超时

connection.setRequestMethod(“GET”); //使用GET提交模式

input = connection.getInputStream();

output = new ByteArrayOutputStream();//初始化字节数组输出流对象

int len = -1;

byte[] buff = new byte[1024];

while ((len = input.read(buff)) != -1) {//读取长度

output.write(buff, 0, len);// 将buff字节数组中从偏移量0开始的 len 个字节写入此字节数组输出流

}

output.flush();

result = new String(output.toByteArray());

}

catch (Exception e) {

e.printStackTrace();

}

finally {

if (input != null) {

try {

input.close();

}

catch (IOException e) {

e.printStackTrace();

}

}

if (output != null) {

try {

output .close();

}

catch (IOException e) {

e.printStackTrace();

}

}

}

return result;

}

//拼接api地址

private static String setParmat(String message) {

String url = “”;//api地址

try {

url =MyRobot.URL_KEY + “?” + “key=” + MyRobot.APi_KEY + “&info=”

  • URLEncoder.encode(message, “UTF-8”);

}

catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return url;

}

}

  • 聊天信息的适配器

package com.example.chat;

import android.annotation.SuppressLint;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

import java.util.List;

public class ChatMessageAdapter extends BaseAdapter {

private List list;

public ChatMessageAdapter(List list) {

this.list = list;

}

@Override

public int getCount() {

return list.isEmpty() ? 0 : list.size();

}

@Override

public Object getItem(int position) {

return list.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public int getItemViewType(int position) {

ChatMessage chatMessage = list.get(position);

// 接收消息:0,发送消息:1

if (chatMessage.getType() == ChatMessage.Type.INCOUNT) {

return 0;

}

return 1;

}

@Override

public int getViewTypeCount() {

return 2;

}

@SuppressLint(“InflateParams”)

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ChatMessage chatMessage = list.get(position);

if (convertView == null) {

ViewHolder viewHolder = null;

// 加载布局

if (getItemViewType(position) == 0) {

convertView = LayoutInflater.from(parent.getContext()).inflate(

R.layout.left, null);

viewHolder = new ViewHolder();

viewHolder.time = (TextView) convertView

.findViewById(R.id.left_time);

viewHolder.message = (TextView) convertView

.findViewById(R.id.message);

} else {

convertView = LayoutInflater.from(parent.getContext()).inflate(

R.layout.right, null);

viewHolder = new ViewHolder();

viewHolder.time = (TextView) convertView

.findViewById(R.id.right_time);

viewHolder.message = (TextView) convertView

.findViewById(R.id.right_message);

}

convertView.setTag(viewHolder);

}

// 设置数据

ViewHolder vh = (ViewHolder) convertView.getTag();

vh.time.setText(DateUtils.dateToString(chatMessage.getDate()));

vh.message.setText(chatMessage.getMessage());

return convertView;

}

private class ViewHolder {

private TextView time, message;

}

}

  • 主体类

package com.example.chat;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.text.TextUtils;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.Window;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.Toast;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

public class ChatActivity extends Activity {

private List list;

private ListView listview;

private EditText input;

private Button send;

private ChatMessageAdapter chatAdapter;

private ChatMessage chatMessage = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.chat);

initView();

initListener();

initData();

}

// 初始视图

private void initView() {

listview = (ListView) findViewById(R.id.listview);

input = (EditText) findViewById(R.id.input_message);

send = (Button) findViewById(R.id.send);

}

// 设置监听事件

private void initListener() {

send.setOnClickListener(onClickListener);

}

// 初始化数据

private void initData() {

list = new ArrayList();

list.add(new ChatMessage(“您好,小洛为您服务!”, ChatMessage.Type.INCOUNT, new Date()));

chatAdapter = new ChatMessageAdapter(list);

listview.setAdapter(chatAdapter);

chatAdapter.notifyDataSetChanged();

}

// 发送消息聊天

private void chat() {

//判断是否输入内容

final String send_message = chat_input.getText().toString().trim();

if (TextUtils.isEmpty(send_message)) {

Toast.makeText(ChatActivity.this, “对不起,您还未发送任何消息”,

Toast.LENGTH_SHORT).show();

return;

}

// 记录刷新

ChatMessage sendChatMessage = new ChatMessage();

sendChatMessage.setMessage(send_message);

sendChatMessage.setData(new Date());

sendChatMessage.setType(ChatMessage.Type.OUTCOUNT);

list.add(sendChatMessage);

chatAdapter.notifyDataSetChanged();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

结尾

如何才能让我们在面试中对答如流呢?

答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?为此我整理了一份Android学习资料路线:

这里是一份BAT大厂面试资料专题包:

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

[外链图片转存中…(img-WiyRrXb4-1712431864757)]

[外链图片转存中…(img-E1tj6Bzu-1712431864757)]

[外链图片转存中…(img-ZOtSKTtv-1712431864757)]

[外链图片转存中…(img-s0yaMUdD-1712431864757)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

结尾

如何才能让我们在面试中对答如流呢?

答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?为此我整理了一份Android学习资料路线:

[外链图片转存中…(img-dbaT9MUq-1712431864757)]

这里是一份BAT大厂面试资料专题包:

[外链图片转存中…(img-ME4E55CE-1712431864758)]

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐