慕课网 小慕机器人总结

小慕机器人实现 学习记录。具体内容看自己博客。学习记录。具体内容看自己博客。 立即下载
1.向第三方API发起请求,解析返回数据
public class HttpUtil {
	public static ChatMessage sendMessage(String msg) {
		ChatMessage message = new ChatMessage();
		String jsonStr = doGet(msg);
		Gson gson = new Gson();
		try {
			//gson解析XML,转成对象,需要gson.jar包
			Result result = gson.fromJson(jsonStr, Result.class);
			message.setMsg(result.getText());
		} catch (JsonSyntaxException e) {
			message.setMsg("服务器繁忙,请稍后再试。");
		}
		message.setDate(new Date());
		message.setType(Type.ANSWER);

		return message;
	}

	public static String doGet(String msg) {
		String url = "";
		String result = "";
		try {
			url = "http://www.tuling123.com/openapi/api?key=87f43665ef51fe960fd4d3950ec021ad&info="
					+ URLEncoder.encode(msg, "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
		InputStream is = null;
		ByteArrayOutputStream baos = null;
		try {
			URL urlNet = new URL(url);// 获得url地址
			HttpURLConnection conn = (HttpURLConnection) urlNet
					.openConnection();// 通过url获得连接
			conn.setReadTimeout(3000);// 设置读数据的时限
			conn.setConnectTimeout(3000);// 设置连接时限
			conn.setRequestMethod("GET");// 设置请求连接方式

			is = conn.getInputStream();
			baos = new ByteArrayOutputStream();
			int len = -1;
			byte[] buf = new byte[128];
			while ((len = is.read(buf)) != -1) {
				baos.write(buf, 0, len);
			}
			result = new String(baos.toByteArray());

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (baos != null) {
					baos.close();
				}
				if (is != null) {
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return result;
	}
}
2.listview+adapter+数据源
public class ChatMessageAdapter extends BaseAdapter {
	private LayoutInflater mInflater;// 布局压榨器,需要上下文对象来获得
	private List<ChatMessage> mData;
	//从activity中传来的context,数据源来初始化这两个必备成员变量
	public ChatMessageAdapter(Context context, List<ChatMessage> mData) {
		mInflater = LayoutInflater.from(context);
		this.mData = mData;
	}

	// 集合的总个数
	@Override
	public int getCount() {
		return mData.size();
	}

	// 获取mData中的对象
	@Override
	public Object getItem(int pos) {
		return mData.get(pos);
	}

	// mData中对象的下标
	@Override
	public long getItemId(int pos) {
		return pos;
	}
////////////////////////////////////////////////////////
这两个方法是listview中有两种/两种以上的item时,用到的
	@Override
	public int getViewTypeCount() {
		return 2;
	}

	@Override
	public int getItemViewType(int pos) {
		return mData.get(pos).getType() == Type.ANSWER ? 0 : 1;
	}
////////////////////////////////////////////////////////
	@Override
	public View getView(int pos, View view, ViewGroup parent) {
		ChatMessage message = mData.get(pos);
		ViewHolder holder = null;// 布局中要更改的值
		if (view == null) {// 当view为空时,创建view
			holder = new ViewHolder();
			// 通过ItemType
			if (getItemViewType(pos) == 0) {
				//把XML压成布局
				view = mInflater.inflate(R.layout.layout_answer, parent, false);
				holder.mDate = (TextView) view
						.findViewById(R.id.tv_answer_date);
				holder.mMsg = (TextView) view.findViewById(R.id.tv_answer_msg);
			} else {
				view = mInflater.inflate(R.layout.layout_send, parent, false);
				holder.mDate = (TextView) view.findViewById(R.id.tv_send_date);
				holder.mMsg = (TextView) view.findViewById(R.id.tv_send_msg);
			}
			view.setTag(holder);//给view设置tag,
		} else {
			holder = (ViewHolder) view.getTag();//从view中得到,tag
		}
		// 设置数据,时间的处理!!!!!   积累呀!!!
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		holder.mDate.setText(sdf.format(message.getDate()));
		holder.mMsg.setText(message.getMsg());

		return view;
	}

	// 布局中要修改的值,建立一个对象
	private final class ViewHolder {
		TextView mDate;
		TextView mMsg;
	}
}
3.activity中的写法
public class MainActivity extends Activity {
	// 适配器的三个必备,ListView/adapter/lists
	private ListView mLvMsgs;
	private ChatMessageAdapter mAdapter;
	private List<ChatMessage> mDatas;

	private EditText mEtInput;
	private Button mBtnSend;

	// 等待接收,子线程完成数据的返回
	//把线程中的要处理的东西放到handler中,分离声明和处理
	private Handler mHandler = new Handler() {
		public void handleMessage(Message msg) {
			ChatMessage message = (ChatMessage) msg.obj;
			mDatas.add(message);
			mAdapter.notifyDataSetChanged();//通知adapter更新!!!
			mLvMsgs.setSelection(mDatas.size() - 1);// 最后一个被选中
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		inti();
		initDatas();
		registeListener();

	}

	private void registeListener() {
		mBtnSend.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				final String sendMsg = mEtInput.getText().toString();
				if (TextUtils.isEmpty(sendMsg)) {
					Toast.makeText(MainActivity.this, "消息不能为空",
							Toast.LENGTH_SHORT).show();
					return;
				}
				ChatMessage sendMessage = new ChatMessage(sendMsg, Type.SEND,
						new Date());
				mDatas.add(sendMessage);
				mAdapter.notifyDataSetChanged();
				mLvMsgs.setSelection(mDatas.size() - 1);

				mEtInput.setText("");
				new Thread() {
					public void run() {
						ChatMessage answerMessage = HttpUtil
								.sendMessage(sendMsg);
						Message m = Message.obtain();//Handler处理的Message的对象,静态方法获得
						m.obj = answerMessage;//把要处理的对象装到message的obj中
						// 创建线程和处理分开
						mHandler.sendMessage(m);//交给Handler处理
					}

				}.start();
			}
		});
	}

	public void inti() {
		mLvMsgs = (ListView) findViewById(R.id.lv_main);
		mEtInput = (EditText) findViewById(R.id.et_input);
		mBtnSend = (Button) findViewById(R.id.btn_send);
	}

	public void initDatas() {
		mDatas = new ArrayList<ChatMessage>();
		mDatas.add(new ChatMessage("你好,小慕为您服务", Type.ANSWER, new Date()));
		mAdapter = new ChatMessageAdapter(this, mDatas);
		mLvMsgs.setAdapter(mAdapter);//为listview绑定适配器
	}
}
4.单独说一下{(把XML转成对象,XML中结点的名字要与对象成员变量的名字一样,利用gson.jar包),
		(java中的enum,枚举类型
		public enum Type {
		    SEND, ANSWER
		}
		在没有枚举类型之前,我们定义常量都是public static final ...,比较不方便,是同一类型的,却还要单独定义....
		有了enum就好了,可以定义在一个枚举类型中了。注意!!! 如上,SEND和ANSWER并不像是C/C++中是从0开始的,它就是它自己!
		更详细的可以参考:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html
)}


实验三 Gmapping建图 自主移动机器人第三次实验课,内容包括:(1)turtlebot的gmapping建图;(2)rosbag的使用;(3)gazebo中的gmapping建图。 阅读详情

相关推荐

【软件逆向】带壳带反调试找flag教程(VMProtect3.0+X64dbg+ScyllaHide)

【软件逆向】带壳带反调试找flag教程(VMProtect 3.0+X64dbg+ScyllaHide)

zhangjiuding的博客 7506

Android智能机器人“小慕”的实现

本博客整理自慕客网Android智能机器人“小慕”的实现。 通过本课程主要可以学到两个知识点: 1、第三方API 图灵机器人的使用 2、ListView多种Item布局时的处理,实现聊天对话的界面 说明:使用图灵机器人需要首先注册相关账号,网址为:http://www.tuling123.com/openapi/ 1、编写一个工具类实现消息发送与接收 public clas...

weixin_34242509的博客 165

GEE去云处理代码段解读(位运算)

GEE去云处理代码段解读,包含位运算符号解读、bitwiseAnd()函数、eq()函数解读

jiekeheiguanglan的博客 2066

小慕读书后台管理平台笔记

setTimeout用法: 错误用法: 正确用法:

喜东东的博客 3411

从工艺到器件:用Silvaco ATLAS仿真PIN二极管击穿电压的保姆级指南

本文详细介绍了使用Silvaco ATLAS仿真PIN二极管击穿电压的全流程指南,从工艺仿真基础搭建到器件结构构建,再到击穿特性仿真和结果分析。通过Silvaco工具链,工程师可以在设计阶段精准预测器件性能,优化击穿电压,提升研发效率。

weixin_34259816的博客 355

车辆横向控制MPC实战:从‘老王模型’到CasADi求解的保姆级避坑指南

本文详细解析了车辆横向控制MPC的实战应用,从经典动力学模型选择到CasADi求解器的优化配置,提供了一套完整的避坑指南。重点介绍了车辆动力学模型的验证要点、CasADi环境的高效配置技巧以及MPC问题建模的核心要素,帮助开发者快速实现稳健的横向控制方案。

weixin_42524499的博客 346

【小慕读书】——Vue/Element UI/Node.js后台管理系统:Vuex 和 Vue-router 进阶

前言:最近在学习Vue+Element UI+Node.js小慕读书中后台管理系统开发课程,这里对学习过程作个笔记,方便自己和大家翻阅。 一、Vuex 原理解析 Vuex 的原理关键:使用 Vue 实例管理状态 <body> <div id="root">{{data}}</div> <div id="root2">{...

柳柳66的博客 216

GB/T 27930-2023协议升级与CANoe仿真测试实践

本文深入解析GB/T 27930-2023协议的核心升级,包括A/B类系统分类与EVIN码引入,并详细指导如何使用CANoe搭建仿真测试环境、编写CAPL脚本及利用DLL库进行一致性验证与故障注入测试,助力开发人员确保电动汽车充电通信的合规性与稳定性。

y7z8a的博客 537

小慕机器人实现学习

1、学习的视频参考 ①: http://edu.51cto.com/course/course_id-624.html  淘宝客户端的实现 这里学习到的是整个项目的分层架构,这是我之前不太懂的。 层可以分为该种形式: com.example.dao 数据操作接口抽象层 com.example.daoimpl 数据操作实现层 com.example.daoimpl.biz 业务层

xiongmaozhijin的专栏 911

摄像头visio_最全面弱电智能VISIO图标集(百个),高大上方案就靠这个了

原标题:最全面弱电智能VISIO图标集(百个),高大上方案就靠这个了不会用Visio,Visio画拓扑画的很丑,怎么办?本期sin66小编免费分享一份最全面的弱电智能VISIO图标集(百个)给大家,以后画拓扑、做方案,直接高大上起来!需要本期资料直接看文末!!接下来我们一起看一下这些Visio图标大全:我们从下图可以看出前端设备主要是由枪机,筒机,无线摄像头,半球,球机,USB摄像头等构成,对于绘...

weixin_39644915的博客 1万+

【YOLOv8改进-损失函数】 YOLOv8自带损失函数CIoU / DIoU / GIoU 详解,以及如何切换损失函数

在介绍YOLOv8中的各种Iou之前,我们先来了解了解目标检测中的损失函数。目标检测模型通常包含两类损失函数:类别损失(分类)和位置损失(回归)。这两类损失函数用于检测模型的最后一部分,根据模型的输出(类别和位置)以及实际标注框(类别和位置),分别计算类别损失和位置损失。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 5189

关于cmooc平台的一些建议(与GitHub和优快云对比之下)

1关于检索,五星推荐 检索也可以优化emmm 和知网等平台检索那种。前提是咱们有足够的数据,博客发表包括资源上传等的时候就能设置关键词。 优快云如下: 2 关于板块设置,三星推荐 类似于优快云,这样读者就能看自己感兴趣的板块 3 关于服务器部署 两星推荐 这个要看你们对平台的生命周期和信心,现在编辑博客有略微卡顿,随着用户的增加,能不能继续保持服务器稳定运行。 推荐采用分布式的技术架构,数据库主从同步。 4 自动化智能机器人引入 五颗星推荐 痛点是运营人员太辛苦了。 建议使用云端机器人。类似于QQ

东方 645

File Load Error for Untitled.ipynb Unhandled error 解决方案

本文主要介绍了File Load Error for Untitled.ipynb Unhandled error 解决方案,希望能对使用jupyter notebook的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

智能聊天机器人的实现(语音引入第三方科大讯飞)

/** * MainActivity */ package com.example.moo; import java.util.ArrayList; import java.util.Date; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Ha

♛ 走心。的专栏 8749

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

usb2.0 to sata 芯片_达摩院发布业界首款语音合成算法专用AI FPGA芯片设计Ouroboros,效率提高百倍...

▲点击上方雷锋网关注这是业界首款专用于语音合成算法的 AI FPGA芯片结构设计,能将语音生成算法的计算效率提高百倍以上。文| 包永刚雷锋网消息,Hot chips 31(2019)正在美国旧金山举行,峰会第二天阿里巴巴带来了《Ouroboros: A WaveNet Inference Engine for TTS Applications on Embedded Devic...

weixin_39665992的博客 1083

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

新手如何参加电子展?

关注+星标公众号,不错过精彩内容来源 | e星球服务站前两期分享了:2024慕尼黑上海电子展 |展商名单及展位图2024慕尼黑上海电子展 | 同期论坛议程大全今天继续为大家带来2024慕尼黑上海电子展《观展宝典》。慕尼黑上海电子展(electronica China)将于2024年7月8-10日在上海新国际博览中心举办。展会今年重点梳理电子行业年度脉络,以新能源汽车、储能、智能驾驶、卫星通信、机...

strongerHuang 280

裸辞搞AI大模型,半年薪资碾压前领导

AI与失业强相关吗?事实证明,AI大模型的成长会导致部分岗位被替换,但同时它与就业也息息相关。AI的快速发展造就了很多高薪的新兴岗位,不同于传统的技术岗位,处于蓝海中的AI大模型岗位的竞争较小,薪资也比较可观。G同学曾经是一名后端开发者,在2020年,大模型火起来不久的时候,就裸辞全职学习AI大模型技术。这个决定在当时看来非常冒险,因为大模型初兴,国内的发展方向尚不明朗,放弃稳定的工作投身前途未知的行业,在大家看来当然不明智。

xxue345678的博客 1426

卡巴斯基安全浏览器_尴尬了,卡巴斯基反病毒软件存在漏洞允许在线跟踪用户...

▲点击上方雷锋网关注研究人员在卡巴斯基反病毒软件中发现了一个漏洞,该漏洞允许访问过的网站和商业第三方服务在线跟踪用户。文| 李勤雷锋网消息,美国时间 8月15日,据外媒 the Hacker News 报道,研究人员在卡巴斯基反病毒软件中发现了一个漏洞,该漏洞允许访问过的网站和商业第三方服务在线跟踪用户。这个漏洞为CVE-2019-8286,存在于卡巴斯基反病毒软件的名为“ K...

weixin_39603778的博客 478

IT人必备11个在线工具,一个比一个强大 !

想要工具的,请务必关注上面的公众号:搜罗工具 。后台有小伙伴想要一些通用类的实用网站分享,今天就上一波!小猿搜寻了很多大牛程序员分享,还请教了身边的资深职场人,给大家总结了一份大咖推荐的超实用网站合集,包含工具类和提效类,赶上要做年终汇报和来年计划的档口,80%你都用得上!先收藏,有需要随时查阅!1、docsmall文件压缩神器,这个网站支持压缩多类型文件,包含图片、动图、PDF,还可以进行PDF...

程序IT圈 802

Android开发中的小技巧

Android eclipse 快捷键 切换AndroidUI 视图 和xml 视图 alt + pageUp alt + pageDown 切换 代码之间 打开的文件 ctrl+ pageUp ctrl+ pageDown

Working_Harder的专栏 1104

【小慕读书】——Vue/Element UI/Node.js后台管理系统:Element-UI使用

前言:最近在学习Vue+Element UI+Node.js小慕读书中后台管理系统开发课程,这里对学习过程作个笔记,方便自己和大家翻阅。Element-UI官网地址:https://element.eleme.cn/#/zh-CN/component/layout 一、vue-cli 3.0 安装和创建项目 3.0 新加入了 TypeScript 以及 PWA 的支持 部分命令发生了...

柳柳66的博客 558

慕课网“小慕听书“ireader项目

此项目源于慕课网 (https://www.imooc.com/) 功能: 可切换男音,女音,河南男方言三种音色以不同的语速,音量朗读文本内容 效果图: 思维导图: 基本代码: 绘制窗口大小,标题等(写在main方法中): //Swing框架,用于生成一个容纳界面的窗口 JFrame jFrame = new JFrame(); //设置窗口大小 jFrame.setSize(900,790); //禁止窗口改变大小 jFrame.setResizable(false); /

qq_51047851的博客 394

慕课小慕读书后台总结

登录输入框,如果没有数据自动聚焦 mounted() { if (this.loginForm.username === "") { this.$refs.username.focus(); } else if (this.loginForm.password === "") { this.$refs.password.focus(); } }, 密码框的显示影藏切换 :icon-class="passwordType === 'passwor.

不想起床 771

慕课(6)

图: 图(Graph)结构是一种非线性的数据结构,图在实际生活中有很多例子,比如交通运输网,地铁网络,社交网络,计算机中的状态执行(自动机)等等都可以抽象成图结构。图结构比树结构复杂的非线性结构。 图的构成:顶点,边。 所有的顶点构成一个顶点集合,所有的边构成边的集合,一个完整的图结构就是由顶点集合和边集合组成。图结构在数学上记为以下形式: G=(V,E) 或者 G=(V(G),E(G)) 其中 ...

JSUChengyuezhen的博客 311
上一篇: android数据存储之SharedPreferences
下一篇: NYOJ 267郁闷的C小加(二)
_低头的麦穗
博客等级 码龄12年 4粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值