暑假作业——小灵机器人

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("\n","");//去掉换行

通过替代方法完成即可

后期APP的开发

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

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

参考资料

极客学院

posted @ 2018-12-12 08:07  20172308周亚杰  阅读(244)  评论(0编辑  收藏  举报