android开发分享Android studio开发小型对话机器人app(实例代码)

前言偶然在网上看到一个免费机器人接口,所以生此想法,接口地址:,android开发比爬虫要繁琐得多,所以本文我将细说接口的调用方法,读者可根据思路去网上找一些免费接口拿来玩,其他代码一带而过,详细源码

前言

偶然在网上看到一个免费机器人接口,所以生此想法,接口地址:,android开发比爬虫要繁琐得多,所以android开发分享Android studio开发小型对话机器人app(实例代码)我将细说接口的调用方法,读者可根据思路去网上找一些免费接口拿来玩,其他代码一带而过,详细源码见文末。

成品展示:

Android studio开发小型对话机器人app(实例代码)

开发步骤

1)新建项目empty,必要可github托管。

2)先写页面在res->layout目录下新建两个layout xml file

Android studio开发小型对话机器人app(实例代码)

activity_main作为主页面,msg_item为附在其上的消息页面。(具体代码见文末)

这里再acitvity_main采用的不是listview而是recyclerview。

(3)写接口调用首先封装一个robotmanager类,用于接收用户输入之后对url进行封装。

  public class robotmanager {   private static string url = "https://api.qingyunke.com/api.php?key=free&appid=0&msg=!!";     public static string geturl(string question){   string real_url = url.replace("!!",question);//将url中的!!替换为用户输入的内容   return real_url;   }  }

其次在java->第一个包下创建一个接口getconnection,用来接收接口返回的返回。

  public interface getconnection {   void onfinish(string response);	//返回正常   void onerror(exception e);	//返回错误  }

然后开始写myconnection类,调用接口,给参,并通过getconnection接口将网上接口返回的数据传递出去。

  public class myconnection {     public static void getresponse(final string url,final getconnection getconnection){   new thread(new runnable() {    @override    public void run() {    httpurlconnection connection;    try{     url url = new url(url);     connection = (httpurlconnection) url.openconnection();     connection.setrequestmethod("get");//get方法     connection.setconnecttimeout(2000);//延时时间     connection.setreadtimeout(3000);     connection.setdoinput(true);     inputstream in = connection.getinputstream();     bufferedreader reader = new bufferedreader(new inputstreamreader(in));     stringbuilder response = new stringbuilder();     string line;     while ((line = reader.readline()) != null) {     response.append(line);     }     log.e("result",response.tostring());     if (getconnection != null) {     getconnection.onfinish(response.tostring());     }else {     log.e("weinull","weinull");//测试时用的,无须关心。     }    }catch(ioexception io) {     if (getconnection != null) {     getconnection.onerror(io);     }    }    }   }).start();     }  }

(4)写页面逻辑页面逻辑主要是将从接口得到的内容渲染到页面上。首先进行一系列初始化,绑定布局,然后监听按钮点击接收用户输入,调用myconnection类传入url,输入内容接收接口返回内容,同时用handler动态更新页面。

  public class mainactivity extends appcompatactivity {     private list<msg> msglist = new arraylist<msg>();     private edittext inputtext;     private button send;     private recyclerview msgrecyclerview;     private msgadapter adapter;     private handler handler = new handler(){   @override   public void handlemessage(@nonnull message msg) {    switch (msg.what){    case 1:{     bundle data = msg.getdata();     string result = data.getstring("result");     msg robotmsg = new msg(result,msg.type_received);     msglist.add(robotmsg);     adapter.notifyiteminserted(msglist.size() - 1); // 当有新消息时,刷新listview中的显示     msgrecyclerview.scrolltoposition(msglist.size() - 1); // 将listview定位到最后一行    }break;    case 2:{}break;    default:break;    }   }   };     private void getinter(string content){   myconnection.getresponse(robotmanager.geturl(content), new getconnection() {    @override    public void onfinish(string response) {    contentbean contentbean = new contentbean();    log.e("getresult",response);    message msg = new message();    bundle data = new bundle();    gson gson = new gson();    contentbean = gson.fromjson(response,contentbean.class);	//用gson将返回内容序列化为contentbean对象。    if(contentbean.getresult()==0){     data.putstring("result",contentbean.getcontent());    }else{     data.putstring("result","我听不懂你在说什么呀!");    }    msg.setdata(data);    msg.what = 1;    handler.sendmessage(msg);    }      @override    public void onerror(exception e) {    e.printstacktrace();    }   });   }     @override   protected void oncreate(bundle savedinstancestate) {   super.oncreate(savedinstancestate);   setcontentview(r.layout.activity_main);   initmsgs(); // 初始化消息数据   inputtext = findviewbyid(r.id.input_text);   send = findviewbyid(r.id.send);   msgrecyclerview = findviewbyid(r.id.msg_recycler_view);   linearlayoutmanager layoutmanager = new linearlayoutmanager(this);   msgrecyclerview.setlayoutmanager(layoutmanager);   adapter = new msgadapter(msglist);   msgrecyclerview.setadapter(adapter);   send.setonclicklistener(new view.onclicklistener() {    @override    public void onclick(view v) {    string content = inputtext.gettext().tostring();    if (!"".equals(content)) {     msg msg = new msg(content, msg.type_sent);     msglist.add(msg);     getinter(content);     log.e("url",robotmanager.geturl(content));     adapter.notifyiteminserted(msglist.size() - 1); // 当有新消息时,刷新listview中的显示     msgrecyclerview.scrolltoposition(msglist.size() - 1); // 将listview定位到最后一行     inputtext.settext(""); // 清空输入框中的内容      }    }   });   }     private void initmsgs() {   msg msg1 = new msg("我是菲菲,快来和我聊天吧* ( ´͈ ᵕ `͈ )◞♡", msg.type_received);   msglist.add(msg1);   }  }

由于接口返回的数据是json格式,所以我们需要对json进行解析,android开发分享Android studio开发小型对话机器人app(实例代码)采用google的gson库对其进行解析,将接口内容序列化为一个类contentbean。解析过程见上面代码。

  public class contentbean {     /**   * result : 0   * content : [04月08日] 邯郸天气:小雨,白天 17℃,夜晚 9℃,微风,<3级转3-4级   */   private int result;   private string content;     public int getresult() {   return result;   }     public void setresult(int result) {   this.result = result;   }     public string getcontent() {   return content;   }     public void setcontent(string content) {   this.content = content;   }  }

(5)其余代码msg和msgadapter用于解析消息是发送方还是接收方
并展示在消息列表上msg

  public class msg {     public static final int type_received = 0;     public static final int type_sent = 1;     private string content;     private int type;     public msg(string content, int type) {   this.content = content;   this.type = type;   }     public string getcontent() {   return content;   }     public int gettype() {   return type;   }    }

msgadapter

  public class msgadapter extends recyclerview.adapter<msgadapter.viewholder> {     private list<msg> mmsglist;     static class viewholder extends recyclerview.viewholder {     linearlayout leftlayout;     linearlayout rightlayout;     textview leftmsg;     textview rightmsg;     public viewholder(view view) {    super(view);    leftlayout = (linearlayout) view.findviewbyid(r.id.left_layout);    rightlayout = (linearlayout) view.findviewbyid(r.id.right_layout);    leftmsg = (textview) view.findviewbyid(r.id.left_msg);    rightmsg = (textview) view.findviewbyid(r.id.right_msg);   }   }     public msgadapter(list<msg> msglist) {   mmsglist = msglist;   }     @override   public viewholder oncreateviewholder(viewgroup parent, int viewtype) {   view view = layoutinflater.from(parent.getcontext()).inflate(r.layout.msg_item, parent, false);   return new viewholder(view);   }     @override   public void onbindviewholder(viewholder holder, int position) {   msg msg = mmsglist.get(position);   if (msg.gettype() == msg.type_received) {    // 如果是收到的消息,则显示左边的消息布局,将右边的消息布局隐藏    holder.leftlayout.setvisibility(view.visible);    holder.rightlayout.setvisibility(view.gone);    holder.leftmsg.settext(msg.getcontent());   } else if(msg.gettype() == msg.type_sent) {    // 如果是发出的消息,则显示右边的消息布局,将左边的消息布局隐藏    holder.rightlayout.setvisibility(view.visible);    holder.leftlayout.setvisibility(view.gone);    holder.rightmsg.settext(msg.getcontent());   }   }     @override   public int getitemcount() {   return mmsglist.size();   }    }

尾声

以上代码可复制使用,但其中有一些图片,类库什么的需要自行导入,完整代码见geithub:点击此处直达

该项目是我早期项目,只是为了记录当初的开发流程,所以并不存在什么设计模式,代码结构也比较乱,注释也比较少,如果有任何问题,欢迎添加我的qq询问!

总结

到此这篇关于android studio开发一个小型对话机器人app的文章就介绍到这了,更多相关android studio 对话机器人内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/898295.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐