Android 智能聊天机器人demo(类似小爱同学)

android 聊天机器人

相关信息全写在代码中,很详细

一 、界面展示

做了图标适配 感觉还可以。。。emmm nice
在这里插入图片描述
在这里插入图片描述

二 、代码

遇到的坑也都在代码中做了解释,下面是我查阅的一些资料
demo下载地址:
https://download.csdn.net/download/qq_42733641/12026256

1、mainActivity.java

http://api.qingyunke.com/ 青云客聊天机器人API 也可以找其他的,但是要注册实名之类的
https://www.jianshu.com/p/4e8e4fd13cf7 ListView与AdapterView全面解析
https://blog.csdn.net/sinat_37064286/article/details/86537354 Java-IO流 数据在网络传输中的类型
https://blog.csdn.net/csxypr/article/details/92378336 String、StringBuffer和StringBuilder的区别

https://www.jianshu.com/p/da6af26b7483
https://blog.csdn.net/github_36217929/article/details/78435026 文字转语音 TextToSpeech类的简单使用
https://blog.csdn.net/lucasxu01/article/details/80764114 json踩坑

package cn.itcast.robot_alpha;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.speech.tts.UtteranceProgressListener;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;import org.json.JSONException;
import org.json.JSONObject;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;public class MainActivity extends AppCompatActivity {private EditText editText;private Button btText;private ListView lvitem;private Button btsetTts;private SeekBar sbSpeedRate;private SeekBar sbPitch;public static String URL = "http://api.qingyunke.com/api.php?key=free&appid=0&msg="; //智能机器人API//listview 适配器private List<String> list = new ArrayList<>();ArrayAdapter<String> adapter;//文字转语音 TTS  使用原生 TextToSpeechprivate TextToSpeech tts;float SpeedRate = 1.0f;   //语速float Pitch = 1.5f;       //音调boolean flag = false; //0 关  1 开    //语音播报开关//handler 接受子线程的消息并控制播报   语音播报不能放在子线程 会闪退@SuppressLint("HandlerLeak")private Handler handler = new Handler(){public void handleMessage(Message msg){if(msg.what == 1){Log.d("接受 = ", "ok");//使用Bundle 携带信息Bundle bundle = msg.getData();String result = bundle.getString("msg");//语音播报开关标志 ,由按钮控制if(flag == true){if(result == null){tts.speak("输入为空",TextToSpeech.QUEUE_FLUSH,null);}//不能在子线程进行,会闪退tts.speak(result,TextToSpeech.QUEUE_FLUSH,null);}}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//控件初始化initview();//listview的适配器 可以自定义 这里使用原生ArrayAdapetradapter = new ArrayAdapter<String>(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,list);list.add("欢迎回来,Alpha!");//speek("欢迎回来,Alpha!");lvitem.setAdapter(adapter);//TextToSpeech 创建及监听TextToSpeech.OnInitListener listener;tts = new TextToSpeech(this, new OnInitListener() {@Overridepublic void onInit(int i) {//是否支持播报if(i == TextToSpeech.SUCCESS){//是否支持中文播报 ,可以在手机设置搜“语音”,查看是否有中文库(有语音助手的一般都会有)int result = tts.setLanguage(Locale.CHINA);if(result != TextToSpeech.LANG_COUNTRY_AVAILABLE && result != TextToSpeech.LANG_AVAILABLE){Toast.makeText(MainActivity.this,"不支持中文",Toast.LENGTH_SHORT).show();}}}});tts.setSpeechRate(SpeedRate);  //设置语速tts.setPitch(Pitch);            //设置语调//监听  不用可删掉tts.setOnUtteranceProgressListener(new UtteranceProgressListener(){@Overridepublic void onStart(String s) {}@Overridepublic void onDone(String s) {}@Overridepublic void onError(String s) {}});}private void initview() {//  textView = findViewById(R.id.tv_item);editText = findViewById(R.id.ed_text);btText = findViewById(R.id.bt_text);lvitem = findViewById(R.id.lv_item);btsetTts = findViewById(R.id.btsettts);sbSpeedRate = findViewById(R.id.sb_SpeedRate);sbPitch = findViewById(R.id.sb_Pitch);//滑动条监听事件sbPitch.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int i, boolean b) {//seekbar是idfloat Rate = (float)i/10;//Log.d("i = ", i+"");// Log.d("rate = ", Rate+"");tts.setPitch(Rate);   //设置音调}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});sbSpeedRate.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int i, boolean b) {//seekbar是idfloat Rate = (float)i/10;//Log.d("i = ", i+"");// Log.d("rate = ", Rate+"");tts.setSpeechRate(Rate);   //设置音速}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});//语音播报控制按钮btsetTts.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {btsetTts.setText("关闭语音");flag = !flag;if(flag == true){Toast.makeText(MainActivity.this,"语音已打开",Toast.LENGTH_SHORT).show();}elseToast.makeText(MainActivity.this,"语音已关闭",Toast.LENGTH_SHORT).show();}});//向API接口发送消息btText.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//tts.speak("哈哈哈哈哈哈哈",TextToSpeech.QUEUE_FLUSH,null);sendMsg();}});}public void sendMsg(){String msg;msg = editText.getText().toString();// textView.setText(msg+"\n");list.add("Alpha: "+msg);adapter.notifyDataSetChanged();   //更新ListViewdoget(msg);}//接受消息并发送public  void doget(final String msg){new Thread(new Runnable(){@Overridepublic void run() {String url = URL+msg;  //拼接消息  使用get方式发送BufferedReader reader = null;HttpURLConnection connection = null;String result;try {//连接java.net.URL con = new URL(url);connection = (HttpURLConnection) con.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(5000);connection.setReadTimeout(5000);//获取返回的数据  接收到的时json字符串InputStream inputStream = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(inputStream));//可变字符串对象,线程不安全,性能略高StringBuilder builder = new StringBuilder();String line = null;while ((line = reader.readLine()) != null) {builder.append(line);}result = builder.toString();//更新UIupdateUI(parseJson(result));Log.d("返回 = ", result);} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (connection != null) {connection.disconnect();if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}}}).start();}private void updateUI(final String result) {runOnUiThread(new Runnable(){@Overridepublic void run() {// textView.append(result);list.add("blibli: "+result);adapter.notifyDataSetChanged();//接受到返回数据就刷新界面//handler 将数据传递出去 使用Bundle携带数据Message message = new Message();message.what = 1;Bundle bundle = new Bundle();bundle.putString("msg",result);message.setData(bundle);handler.sendMessage(message);}});}//json数据处理private static String parseJson(String date) {String result = null;try {JSONObject jsonObject = new JSONObject(date);result = jsonObject.getString( "content");Log.d("处理 = ", result);} catch (JSONException ex) {ex.printStackTrace();}return result;}@Overrideprotected void onStop() {super.onStop();tts.stop(); // 不管是否正在朗读TTS都被打断tts.shutdown();  //释放资源}
}
2.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btsettts"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开启语音"/><TextViewandroid:id="@+id/tv_setting"android:layout_width="wrap_content"android:layout_height="match_parent"android:lines="2"android:maxEms="3"android:gravity="center"android:text="音速:音调:" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><SeekBarandroid:id="@+id/sb_SpeedRate"android:layout_width="match_parent"android:layout_height="wrap_content"android:progress="10"android:max="20"android:layout_weight="1"/><SeekBarandroid:id="@+id/sb_Pitch"android:layout_width="match_parent"android:layout_height="wrap_content"android:progress="10"android:max="20"android:layout_weight="1"/></LinearLayout>></LinearLayout><ListViewandroid:id="@+id/lv_item"android:layout_width="match_parent"android:layout_height="40dp"android:layout_weight="1"></ListView><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><EditTextandroid:id="@+id/ed_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="输入框"android:layout_weight="1"/><Buttonandroid:id="@+id/bt_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="发送"/></LinearLayout></LinearLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3261.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现一款接入chatGPT的智能音箱

现有的一些“智能音箱”如某度和某猫精灵&#xff0c;跟现在的chatGPT比显得智障。如果能有一款接入chatGPT的智能音箱&#xff0c;它的交互性就好多啦。有gpt加持的智能音箱绝对会很强&#xff0c;以下提供探讨下实现思路。 目前智能音箱在语音交互层面依然不够成熟&#xff0…

使用Midjourney与ChatGPT组合会怎么样?

Midjourney 和 ChatGPT 都是目前比较先进的自然语言处理技术&#xff0c;Midjourney是一种基于深度学习的文本生成模型&#xff0c;而ChatGPT是一种基于自注意力机制的大规模预训练语言模型。 使用MidjourneyChatGPT可以结合两种技术的优势&#xff0c;实现更加高效和准确的文…

一觉醒后ChatGPT 被淘汰了

OpenAI 的 Andrej Karpathy 都大力宣传&#xff0c;认为 AutoGPT 是 prompt 工程的下一个前沿。 近日&#xff0c;AI 界貌似出现了一种新的趋势&#xff1a;自主人工智能。 这不是空穴来风&#xff0c;最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归…

ONLYOFFICE中的chatGPT 是如何编写毕业论文以及翻译多种语言的

前言 chatGPT这款软件曾被多个国家的大学禁用&#xff0c;我们也多次在网上看到chatGPT帮助应届毕业生编写毕业答辩论文&#xff0c;但是这款软件目前还没有在国内正式上线&#xff0c;ONLYOFFICE7.3版本更新后呢&#xff0c;就添加了chatGPT该功能&#xff0c;并且正常使用。 …

“国产版ChatGPT”文心一言发布会现场Demo硬核复现

文章目录 前言实验结果一、文学创作问题1 :《三体》的作者是哪里人&#xff1f;问题2&#xff1a;可以总结下三体的核心内容吗&#xff1f;如果要续写的话&#xff0c;可以从哪些角度出发&#xff1f;问题3&#xff1a;如何从哲学角度来进行续写&#xff1f;问题4&#xff1a;电…

InstructGPT

InstructGPT 论文精读【论文精读48】_哔哩哔哩_bilibili更多论文&#xff1a;https://github.com/mli/paper-reading, 视频播放量 160552、弹幕量 803、点赞数 5846、投硬币枚数 4003、收藏人数 5253、转发人数 2664, 视频作者 跟李沐学AI, 作者简介 &#xff0c;相关视频&…

【记录】ChatGPT|使用技巧(更新至2023年2月8日)

昨天&#xff0c;2022年12月13日&#xff0c;在下午和晚上&#xff0c;ChatGPT 就开始因为请求过多而写到一半就崩溃&#xff0c;出现network error&#xff0c;可见它的关注度确实是越来越可观了。 正好最近世界杯&#xff0c;有博客活动&#xff0c;干脆也总结一下 ChatGPT 目…

Instruction Tuning(FLAN、instructGPT、chatGPT)

首页最近被chatGPT刷屏&#xff0c;但翔二博主左看右看发现很多想法似乎都是一脉相通的&#xff0c;于是连夜从存档中找了一些文章尝试理一理它的理论路线。 具身智能综述和应用&#xff08;Embodied AI&#xff09;多模态中的指令控制 同时想到今年在智源人工智能前沿报告&a…

ChatGPT助力软件开发

抛开Stack Overflow不谈&#xff0c;开发人员有了一个新的好朋友&#xff0c;它就是ChatGPT。ChatGPT是由人工智能驱动的语言模型&#xff0c;可以理解代码&#xff0c;还可以用自然语言回答问题。有了它&#xff0c;程序员再也不用在无尽的Stack Overflow页面和评论中搜索答案…

国内首个类ChatGPT模型MOSS被挤崩溃,团队致歉

2月20日&#xff0c;复旦团队发布国内首个类ChatGPT模型MOSS&#xff0c;引起不少网友关注&#xff0c;由于瞬时访问压力过大&#xff0c;MOSS服务器昨晚还被网友挤崩溃了。 2月21日&#xff0c;MOSS官网发布公告称&#xff0c;MOSS还是一个非常不成熟的模型&#xff0c;距离C…

多数据库管理工具哪家强?ChatGPT点评,第一位并不是Navicat

SQL逐渐成为职场必备的编程语言&#xff0c;相信大家都不陌生。SQL是一种结构化查询语言&#xff0c;是用于数据库之间通信的编程语言。每个数据库都有着自己独特的访问规则&#xff0c;但大体上是遵循SQL标准。 因此&#xff0c;辗转于不同的数据库之间&#xff0c;开发者或D…

ChatGPT,会是现实世界的MOSS吗?

最近&#xff0c;两个人工智能系统彻底火出了圈&#xff0c;成为许多网友热议的焦点。 一个是冷酷无情的“幕后主角”MOSS&#xff0c;一个是多才多艺的“全能网友”ChatGPT。 先来说说MOSS。今年春节档&#xff0c;科幻电影《流浪地球2》热映&#xff0c;电影中一个面试环节令…

MarioGPT自动生成“超级玛丽”;周鸿祎:ChatGPT可能产生意识;国内版ChatGPT复旦首发,但“非常不成熟”...

本周&#xff0c;AI业界又有哪些新鲜事&#xff1f; ChatGPT 国内版ChatGPT首发被复旦“抢注”&#xff0c;但非常不成熟&#xff1f; 虽然各大厂如火如荼地备战国内版“GPT”&#xff0c;但谁也没抢到这个“首发”&#xff1a;2 月 20 日晚&#xff0c;复旦大学自然语言处理实…

为Kubernetes集群部署一个ChatGPT机器人

点击上方“芋道源码”&#xff0c;选择“设为星标” 管她前浪&#xff0c;还是后浪&#xff1f; 能浪的浪&#xff0c;才是好浪&#xff01; 每天 10:33 更新文章&#xff0c;每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路&#xff0c;很肝~中文详细注释的开源…

ChatGPT崩了!全球宕机超12小时,打工人叫苦连天

ChatGPT崩了。 昨天半夜&#xff0c;来自全球各地的用户纷纷发现网站弹出报错警告&#xff0c;然后立刻无法使用。 即使是有特权的Plus账户也未能幸免。 一时之间&#xff0c;#chatgptdown#的话题刷屏。 不少重度用户表示很捉急&#xff1a; 没了你我的工作可咋整。 每过10分…

用ChatGPT三分钟免费做出数字人视频- 提升自媒体魅力

用ChatGPT三分钟免费做出数字人视频- 提升自媒体魅力 一、ChatGPT产生文案二、腾讯智影网站三、选择一个2D数字人四、粘贴文本五、编辑自定义&#xff0c;合成六、资源七、其他数字人平台推荐八、生成视频预览 本教程收集于&#xff1a;AIGC从入门到精通教程汇总 操作指引 Ch…

ChatGPT4生成数字人视频!

1、安装HeyGen插件 2、如何使用Heygen&#xff08;GPT的回答&#xff09; Heygen是一个插件&#xff0c;用于从文本生成虚拟人物视频。这个插件可以根据您提供的文本生成一个虚拟人物的视频。您可以选择虚拟人物的性别和肤色&#xff0c;以及为视频添加标题。 这是使用Heygen的…

2步轻松生成数字人视频,ChatGPT为你提供新体验

ChatGPT大家一定很熟悉。一经问出&#xff0c;便引起轩然大波。大量网友对其智能印象深刻。当然&#xff0c;很多网友也将其视为自己创造的工具。可以在实践中使用&#xff0c;可以节省大部分时间。比如有人用它2分钟生成一个视频&#xff0c;用它写各种文案&#xff0c;写小说…

【转】云计算、大数据和人工智能简介

转自华为ls&#xff0c;原作者yangsha 讲得非常棒。 链接http://sns.huaweils.com/post/threaddetail?threadid159#commentdetail-0 从目前技术潮流来看&#xff0c;一般谈云计算的时候会提到大数据、谈人工智能的时候会提大数据、谈人工智能的时候会提大数据……感觉三者之…

马斯克和扎克伯格线上约架,地点“票价”都已定;超10万个ChatGPT账号泄露;苹果推出Vision Pro开发工具|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…