zoukankan      html  css  js  c++  java
  • 暑假作业——小灵机器人

    APP界面展示

    1. 打开软件,小灵机器人会自动发出欢迎语(这是设置好的,随机出现)

    2. 正常对话

    3. 当发送英语等其它语言会翻译它

    4. 还可以发送表情等图片

    5. 还有其他智能对话(因为虚拟机内输入不了汉语,无法展示)

    APP功能介绍

    这款APP的目的很简单,就是与机器人聊天
    可以通过它来获取天气、百科等人工智能回复的消息,并且可以在一定程度上完成与人的交流而不是涉及知识上的问答
    更加人性化的设计增强了用户的可用性

    APP开发总览

    APP工程包展示

    APP开发过程

    (1. 从图灵官网注册并获取图灵API用于实现小灵机器人的智能回复
    注册平台:图灵机器人

    注册登陆后,即可获得自己的API用于开发等选项

    (2. 搭建Android环境
    (3. 异步请求数据:通过使用图灵机器人API在Android平台获取数据

    import android.os.AsyncTask;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    public class HttpDate extends AsyncTask<String,Void,String> {
    
        private HttpClient mHttpClient;
        private HttpGet mHttpGet;//请求方式
        private HttpResponse mHttpResponse;//获取请求的返回
        private HttpEntity mHttpEntity;//http的实体
        private InputStream in;//转换成流文件做处理
        private HttpGetDateListener listener;
    
        private String url;
        public HttpDate(String url,HttpGetDateListener listener){
            this.url=url;
            this.listener=listener;
        }
    
        public HttpDate(String url){
        this.url = url;
        }
    
        @Override
        protected String doInBackground(String... strings) {
            try {
                mHttpClient = new DefaultHttpClient();//实例化客户端
                mHttpGet = new HttpGet(url);//get方式请求
                mHttpResponse = mHttpClient.execute(mHttpGet);//通过客户端发送
                mHttpEntity = mHttpResponse.getEntity();//获取数据
                in = mHttpEntity.getContent();//数据转换成流文件
                BufferedReader br = new BufferedReader(new InputStreamReader(in));//通过缓冲区读取
                String line = null;//获取数据
                StringBuffer sb = new StringBuffer();//储存所有的数据
                while ((line = br.readLine()) != null) {//读取数据
                    sb.append(line);
                }
                return sb.toString();
    
            } catch (Exception e) {
    
            }
            return null;
        }
        @Override
        protected void onPostExecute(String s) {
            listener.getDateUrl(s);
            super.onPostExecute(s);
        }
    }
    

    (4. json数据解析:将json数据解析从而获取需要内容,以便显示在对话框

    public void parseText(String str) {
            try {
                JSONObject jb = new JSONObject(str);
    //            System.out.println(jb.getString("Code"));
    //            System.out.println(jb.getString("text"));
                ListDate listDate= new ListDate(jb.getString("text"),ListDate.RECEIVER,getTime());
                lists.add(listDate);
                adapter.notifyDataSetChanged();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    

    从异步请求获得的信息当中提取出所需要的内容,并将其加入到列表中
    (5. 布局实现

    这一步也很重要
    不同于其它页面的布局,聊天页面的布局要实现对话的上下滚动,而不是静止的东西
    每一次发送消息和收到回复,都需要判断当前应该加载机器人还是用户头像

    (6. 点9图片的设置:防止对话框图片因为承载内容文字过多而导致变形、失真

    点9图片是Android自带的功能,这样的设计会更加人性化

    (7. 添加欢迎语

        private String getRandomWelcomeTips(){//随机出现欢迎语
            String welcome_tip = null;
            welcome_array = this.getResources().getStringArray(R.array.welcome_tips);
            int index = (int) (Math.random()*(welcome_array.length-1));
            welcome_tip = welcome_array[index];
            return welcome_tip;
        }
    

    欢迎语是实现设置好的几种随机出现一个,从而提高用户的兴趣

    (8. 添加时间

    private String getTime(){
            currentTime = System.currentTimeMillis();
            SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            Date curDate = new Date();
            String str = format.format(curDate);
            if (currentTime - oldTime >= 5*60*1000){
                oldTime = currentTime;
                return str;
            }else
            {
                return "";
            }
        }
    

    更加人性化的设置,告诉用户当前时间
    并且设置了5分钟后发送消息再次显示时间

    (9. 其它细节
    a. 输入框在发送完内容之后应该自动清空,不清空会对用户输入造成不便
    直接将其设置为空即可

    sendtext.setText("");
    

    b. 输入框发送的内容要去掉换行和空格,否则小灵机器人可能会不理解

            String dropk = content_str.replace(" ","");//去掉空格
            String droph = dropk.replace("
    ","");//去掉换行
    

    通过替代方法完成即可

    后期APP的开发

    如果学有余力的话
    这款APP还有许多可以开发的选项,比如:

    • 支持语音输入,回复
    • 支持服务器存储,实现账号登录
    • 支持头像、聊天背景、聊天气泡的更换
      等等更加人性化的设计

    参考资料

    极客学院

  • 相关阅读:
    Unity物理系统随记
    Unity相机跟随小结
    unity制作赛车游戏
    动态编程
    C#-特性,反射,动态编程
    BASE64加解密
    idea快捷键
    git安装和git命令:全局设置用户名邮箱配置
    基于Node.js+MySQL开发的开源微信小程序商城(微信小程序)部署环境
    微信小程序开发入门(一),Nodejs搭建本地服务器
  • 原文地址:https://www.cnblogs.com/zhouyajie/p/10105930.html
Copyright © 2011-2022 走看看