图灵机器人

原创 2016年06月02日 09:57:13

最近做了一个和机器人聊天的App,还没有全部做完,我先整理出基本的功能,以后慢慢加(此版本为1.0)。
功能:
1.实现网络访问

2.可以和机器人进行简单聊天

3.在bean包中封装了四个机器人毛毛的回答数据类

4.实现聊天记录的存储功能。

1.完成网络访问
首先需要第三方库资源,图灵机器人的网址:http://www.tuling123.com/ 可以设置自己的专属机器人。
下载它的API接入文档,里面有详细的请求说明,这里不赘述。
上代码

 public static void doPost(final String massage,final HttpCallbackListner listner) {

 final StringBuffer sbf = new StringBuffer();
     new Thread(new Runnable() {
          @Override
           public void run() {
              try {
                  URL url =  new URL(API_ROBOT);
                   HttpURLConnection connection =
                  (HttpURLConnection)url.openConnection();
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    connection.setDoInput(true);
                    connection.setDoOutput(true);
                    connection.setRequestMethod("POST");
                    //规定访问需要“utf-8"模式
            connection.setRequestProperty("content-type","applcation/json: charset = utf-8");
            //将发送的问题,封装成一个javabean
                    SendMsg sm = new SendMsg();
                    sm.setKey(API_KRY);
                    //不用这种方式了
                  String Info = URLEncoder.encode(massage);
                    sm.setInfo(massage);
                    String msg =ParaseJson.convertJson(sm);

               OutputStream out = connection.getOutputStream();

                   out.write(msg.getBytes());
                    out.flush();
                    BufferedReader br = new BufferedReader(new InputStreamReader(
                            connection.getInputStream()));

                   String str = null;
                    while ((str = br.readLine())!=null){
                        sbf.append(str);
                    }

                      str = sbf.toString();

                    Log.d("TAG","request message is"+str);

                        br.close();
                        out.close();

                    if (listner!=null){
                        String result = sbf.toString();

                        listner.onSuccess(result);
                    }

                } catch (MalformedURLException e) {
                    e.printStackTrace();

                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (ProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    listner.onFailed(e);
                    e.printStackTrace();
                }
            }
        }).start();

2 .Json数据解析

public static Object parseJson(String result)  {
        List<String> list = null;

        try {
            JSONObject jsonobject =new JSONObject(result);
            int code = jsonobject.getInt("code");
            String msg = jsonobject.getString("text");
            if (jsonobject.has("url")){
              String url = jsonobject.getString("url");
                if (jsonobject.has("list")){
                    JSONArray jsonArray = jsonobject.getJSONArray("list");
                    for (int i = 0;i<jsonArray.length();i++){
                    JSONObject jFather = jsonArray.getJSONObject(i);
                    String address = jFather.getString("detailurl");
                    list.add(address);
                    }
                   NewsMsg n = new NewsMsg();
                    n.setmCode(code);

                    StringBuilder sb =new StringBuilder();
                    sb.append(msg);

                    for (int k = 0; k<list.size(); k++){
                        sb.append(list.get(k));
                    }
                    msg = sb.toString();
                    n.setmMsg(msg);
                    return n;
                }else {
                   LinkMsg l =  new LinkMsg();
                    l.setUrl(url);
                    l.setmCode(code);
                    l.setmMsg(msg+url);
                    return l;
                }

            }else {
                TextMsg t =new TextMsg();
                t.setmMsg(msg);
                t.setmCode(code);
                return t;
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

3 .简单聊天界面的实现
这部分代码实在太多,就捡比较重要的说,这次是仿微信界面,消息的布局分左右两种,先创建一个CheatMessageAdapter 的类让它继承BaseAdapter,然后覆写它的 getItemViewType(int position)和getViewTypeCount()方法。

      @Override
    public int getItemViewType(int position) {
        Object object = mDates.get(position);

        if (object instanceof ReturnMessage){

            return 0;

        }else
            return 1;

    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

在getView()方法里也要进行不同判断

 @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        Object message = mDates.get(position);
        ViewHolder mHolder = null;
       if (convertView ==null) {
           if (getItemViewType(position) == 0) {
               convertView = mInflater.inflate(R.layout.cheat_robot_layout, null);
               mHolder = new ViewHolder();
               mHolder.msgText = (TextView) convertView.findViewById(R.id.id_tvt_cheat_robot);
               mHolder.showTimeText = (TextView) convertView.findViewById(R.id.id_tvt_timeshow);

           } else {
               convertView = mInflater.inflate(R.layout.cheat_me_layout, null);
               mHolder = new ViewHolder();
               mHolder.msgText = (TextView) convertView.findViewById(R.id.id_tvt_cheat_me);
               mHolder.showTimeText = (TextView) convertView.findViewById(R.id.id_tvt_timeshow);

           }
           convertView.setTag(mHolder);
       }else{
           mHolder = (ViewHolder) convertView.getTag();
       }
           if (message instanceof ReturnMessage) {
               setDate(mDates.get(position),mHolder);
           }else if (message instanceof CheatMessage){
              setDate(mDates.get(position),mHolder);
           }
        return convertView;
    }

   private final class ViewHolder{
      TextView showTimeText;
       TextView msgText;
    }

    private void setDate(Object object,ViewHolder holder) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (object instanceof CheatMessage) {
            holder.showTimeText.setText(sdf.format(((CheatMessage) object).getDate()));

            holder.msgText.setText(((CheatMessage) object).getMsg());
        } else {
            if (object instanceof ReturnMessage) {
                switch (typeConvertNumber((ReturnMessage)object)) {
                    case 0:
                        holder.showTimeText.setText(sdf.format(new Date()));

                        holder.msgText.setText("出错了,我没有找到匹配的东西");
                        break;
                    case 1:  holder.showTimeText.setText(sdf.format(new Date()));

                            holder.msgText.setText(((TextMsg) object).getmMsg());
                        break;
                    case 2:holder.showTimeText.setText(sdf.format(new Date()));

                        holder.msgText.setText(((LinkMsg) object).getmMsg());
                        break;
                    case 3:holder.showTimeText.setText(sdf.format(new Date()));

                        holder.msgText.setText(((NewsMsg) object).getmMsg());
                }


            }
        }
    }
    private int typeConvertNumber(ReturnMessage message){
        int n = 0;
        if (message instanceof TextMsg){
            n=1;
            return n;
        }else if (message instanceof LinkMsg){
            n=2;
            return n ;
        }else if (message instanceof NewsMsg){
            n =3;
            return n;
        }
        return 0;
    }

未完待续,先写到这里,等1.0版本写完了,我会上传到github上,敬请期待。

版权声明:本文为博主原创文章,未经博主允许不得转载。

图灵机器人SDK接入指南

图灵机器人SDK接入指南图灵机器人:官网注册账号注册个账号,创建个应用,进入后台,点开机器人接入,你会看到API key和secret下载SDK点击下载Android SDK,解压以后会有libsco...
  • q4878802
  • q4878802
  • 2016年06月03日 14:54
  • 5757

低门槛入门——图灵机器人开发

实现圆形头像、实现listview多布局适配优化....图灵机器人示范
  • u010794180
  • u010794180
  • 2015年07月20日 16:04
  • 2367

图灵机器人智能聊天—代码分析

图灵机器人案例:来自慕课网,由于讲师讲的太快,我来一个代码分析,方便自己查阅 如图页面: 1.项目详解   要求接入图灵官网的API,做一个能机器  实现类似微信的聊天页面 2.项目核心   ...
  • qq_26385187
  • qq_26385187
  • 2015年10月18日 20:49
  • 1709

【毕业设计】图灵机器人的实现

最简单的应用,没有什么难点,直接上图不为什么,只为分享github下载链接
  • u013000152
  • u013000152
  • 2017年02月24日 21:29
  • 326

使用JavaScript构建图灵机器人项目

说实话,学过安卓的基本上都对图灵机器人很熟悉,基本上是入门必学。刚好这几天有时间,就把之前做的js版图灵机器人分享一下。 嗯,先上简单的一张效果图吧。 这里添加了提示文本,然后输入框添加了占位...
  • lovefive5
  • lovefive5
  • 2017年05月25日 11:00
  • 299

图灵机器人学习

图灵机器人学习 一与机器人聊天 APKEY: 图灵官网申请 MSG :聊天内容 package com.tuling.robot; import java.io.BufferedReader; i...
  • wangqiankun2010
  • wangqiankun2010
  • 2015年05月05日 16:46
  • 390

图灵机器人API 2.0 SDK for PHP

官方没有web的SDK, 更没有PHP的SDK, 而且手册在认证环节写得不明不白, 所以本人写了PHP的SDK,经测试很好用。 访问Git: https://github.com/gdali/tuli...
  • gdali
  • gdali
  • 2017年06月06日 18:30
  • 612

图灵机器人-Java/Android

一直觉得图灵机器人这个小东西是一个很好玩的东西,今天去官网看了一下,里面一段Java代码的调用试例,而且是以main方法封装好了的,我想是不是可以直接拿来用。一点戏剧性都没有,除了自己import了几...
  • u013761665
  • u013761665
  • 2015年05月27日 10:52
  • 1979

如何集成图灵机器人,简单实现语音聊天

图灵机器人有三个基本功能: (1)语音识别:将语音识别成相应的文本。 (2)语义理解:将文本识别成领域相关的语义结果。 (3)语音合成 : 将文本转化成语音读出。 要集成图灵机器人,首先要进行...
  • qq_34195670
  • qq_34195670
  • 2016年08月13日 09:36
  • 6475

Android图灵机器人的实现(一)

前二天,看了Android 智能问答机器人的实现的博文,我们可以进入图灵机器人主页,根据平台接入的介绍,我们知道,主是要在客户端按一定的格式(key 必须 + userid get 非必须,上下文功...
  • hfreeman2008
  • hfreeman2008
  • 2014年11月30日 23:11
  • 2429
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图灵机器人
举报原因:
原因补充:

(最多只允许输入30个字)