一、前言

茉莉机器人与其他机器人相比,主要的优势就是免费,不足之处就是不够智能,很多问题都回答不出来。不过呢,茉莉机器人允许用户自定义问题和问题对应的回答,对个人而言还是挺有用的,你可以利用这一点,记录自己容易忘记的一些事情。当然,不建议你把重要的信息,例如账户密码放上去。下图是注册登录账号之后的个人中心,你也可以去官网自己注册一个。

二、APP界面

应用比较简单,只有一个界面,如下图。

可以看到,你想让它怎么回答就怎么回答。大家自行去官网注册,把Api Key和Api Secret换成你们自己的即可。

三、代码

程序的所有接口、类如下图所示。

HttpCallbackListener和HttpUtil是用来进行网络请求操作的。
MainActivity是主界面对应的活动。
Msg是消息的实体类。
MsgAdapter是RecyclerView的适配器。

  1. HttpCallbackListener
public interface HttpCallbackListener
{void onFinish(String response);void onError(Exception e);
}
  1. HttpUtil
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpUtil
{public static void sendHttpRequest(final String address, final HttpCallbackListener listener){new Thread(new Runnable(){@Overridepublic void run(){HttpURLConnection connection = null;try{URL url = new URL(address);connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(8000);connection.setReadTimeout(8000);connection.setDoInput(true);connection.setDoOutput(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);}if (listener != null){// 回调 onFinish()方法listener.onFinish(response.toString());}} catch (Exception e){if (listener != null){// 回调 onError()方法listener.onError(e);}} finally{if (connection != null){connection.disconnect();}}}}).start();}}
  1. MainActivity
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;public class MainActivity extends AppCompatActivity
{private EditText et;private Button btn;private RecyclerView rv;private List<Msg> msgList = new ArrayList<>();private MsgAdapter adapter;private String [] arr={"近来可好,我亲爱的主人!","欢迎主人的归来!","很高兴又见到了我的主人!","主人您好,请问有什么可以帮您的吗?","我是一个能跟用户智能交互的“人”,可以帮用户查询一些实用的资料,比如天气预报、LoL战绩、IP地址等,还拥有一些娱乐系统,比如笑话和抽签等。"};private long curTime=0,oldTime=0;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et=findViewById(R.id.et);btn=findViewById(R.id.btn);rv=findViewById(R.id.rv);LinearLayoutManager layoutManager = new LinearLayoutManager(this);rv.setLayoutManager(layoutManager);adapter = new MsgAdapter(msgList);rv.setAdapter(adapter);initMsgs();btn.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){String content = et.getText().toString();if(!content.equals("")){Msg msg = new Msg();msg.setContent(content);msg.setType(Msg.TYPE_SEND);SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = simpleDateFormat.format(new Date());msg.setTime(format);msgList.add(msg);adapter.notifyItemInserted(msgList.size() - 1); // 当有新消息时,刷新 RecyclerView 中的显示rv.scrollToPosition(msgList.size()-1); 将RecyclerView 定位到最后一行et.setText("");InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(et.getWindowToken(), 0);HttpUtil.sendHttpRequest("http://i.itpk.cn/api.php?api_key=fe6ed258c8faf18e6400bd7a9d401f16&api_secret=jwxa3c845wxb&question=" + content, new HttpCallbackListener(){@Overridepublic void onFinish(String response){Msg msg = new Msg();msg.setContent(response);msg.setType(Msg.TYPE_RECEIVE);SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = simpleDateFormat.format(new Date());msg.setTime(format);msgList.add(msg);adapter.notifyItemInserted(msgList.size() - 1); // 当有新消息时,刷新 RecyclerView 中的显示rv.scrollToPosition(msgList.size()-1); 将RecyclerView 定位到最后一行}@Overridepublic void onError(Exception e){}});}}});}private void initMsgs(){Random random=new Random();int i = random.nextInt(arr.length);Msg msg1 = new Msg();msg1.setType(Msg.TYPE_RECEIVE);msg1.setContent(arr[i]);SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = simpleDateFormat.format(new Date());msg1.setTime(format);msgList.add(msg1);}}
  1. Msg
public class Msg
{public static final int TYPE_RECEIVE=0;public static final int TYPE_SEND=1;private String content;private int type;private String time;public String getContent(){return content;}public void setContent(String content){this.content = content;}public int getType(){return type;}public void setType(int type){this.type = type;}public String getTime(){return time;}public void setTime(String time){this.time = time;}
}
  1. MsgAdapter
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder>
{private static long curTime=0,oldTime=0;private List<Msg> mMsgList;static class ViewHolder extends RecyclerView.ViewHolder{LinearLayout leftLayout;LinearLayout rightLayout;TextView leftMsg;TextView rightMsg;TextView timeTv1;TextView timeTv2;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);timeTv1=(TextView)view.findViewById(R.id.timeTv1);timeTv2=(TextView)view.findViewById(R.id.timeTv2);}}public MsgAdapter(List<Msg> msgList){mMsgList = msgList;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.msg_item, parent, false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(ViewHolder holder, int position){Msg msg = mMsgList.get(position);if (msg.getType() == Msg.TYPE_RECEIVE){// 如果是收到的消息,则显示左边的消息布局,将右边的消息布局隐藏holder.leftLayout.setVisibility(View.VISIBLE);holder.rightLayout.setVisibility(View.GONE);holder.leftMsg.setText(msg.getContent());holder.timeTv1.setText(msg.getTime());} else if(msg.getType() == Msg.TYPE_SEND){// 如果是发出的消息,则显示右边的消息布局,将左边的消息布局隐藏holder.rightLayout.setVisibility(View.VISIBLE);holder.leftLayout.setVisibility(View.GONE);holder.rightMsg.setText(msg.getContent());holder.timeTv2.setText(msg.getTime());}}@Overridepublic int getItemCount(){return mMsgList.size();}}
四、项目的地址

github地址

利用茉莉机器人接口开发一个简单的安卓机器人app相关推荐

  1. 如何利用spring框架来开发一个简单的小项目——书店项目

    这里我将用spring来开发一个简单的书店项目 Step1:所用到的开发软件为 idea , 所用到的jar包为 这些jar的下载可在 官网 下载,选择5.2.6版本下载,不会的在下面评论私信 Ste ...

  2. 【如何快速的开发一个简单的iOS直播app】(代码篇)

    开篇([如何快速的开发一个完整的iOS直播app](原理篇) ) 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金 ...

  3. 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  4. c语言float如何做减法,利用c语言设计开发一个简单计算器,可进行加减乘除运算....

    共回答了18个问题采纳率:94.4% #include #include void add(float num1,float num2) { printf("num1 + num2 = %6 ...

  5. 利用WCF的callback机制开发一个简单的多人游戏模型

    本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...

  6. python可以做机器人吗_零基础如何用Python写一个简单的WeChat机器人?(内附代码)...

    (bing图片) python这两年热火朝天,依托其众多类库,基于python的应用层出不穷,也大大降低了非计算机专业人员的入门门槛,WeChat机器人自然不在话下!-- 聪明的瓦肯人 苦于有时候总是 ...

  7. django之十一--开发一个简单的醉得意菜单和人均支付金额查询页面

    一.前言 针对搭伙吃饭的点菜,我们时常会从人数和人均金额去考虑一家餐厅的菜单,所以点菜对于大锅饭的伙伴也成了一门学问和难题,本篇文章巧妙的应用代码思想,将实际问题转化为代码问题,例如如下是一个醉得意的 ...

  8. 机器人坐标系建立_如何在30分钟内建立一个简单的搜索机器人

    机器人坐标系建立 by Quinn Langille 奎因·兰吉尔(Quinn Langille) 如何在30分钟内建立一个简单的搜索机器人 (How to Build A Simple Search ...

  9. 开发一个简单易用的SDK的详细步骤(超详细,超适用)

    文章目录 开发一个简单易用的SDK的详细步骤 创建starter步骤 关键点 总结 开发一个简单易用的SDK的详细步骤 创建starter步骤 1.新建一个 spring boot 初始化项目 2.添 ...

最新文章

  1. php impload 展开,PHP implode()函数用法讲解
  2. 【转】Linux Netfilter实现机制和扩展技术
  3. Jmeter之断言操作
  4. 前美团产品专家罗鑫:谈谈我对增长这件事的理解
  5. SpringMVC-RestfulCRUD
  6. k8s pod资源限制策略:requests、limits配置示例
  7. dns的服务器地址是多少当前位置,dns的服务器地址设置为多少
  8. mysql主从修改系统参数步骤_mysql主从配置的参数配置与步骤_MySQL
  9. electron 主进程与渲染进程 渲染进程与渲染进程 之间的通信
  10. 谷歌浏览器插件入门示例
  11. linux急救模式_抢救Linux:我如何将组织介绍给Linux
  12. windows2003路由和远程访问 试图连接到数据存储时出错
  13. Exchange 混合部署—Office 365 注册及预览
  14. 如何得到DataTable的列名
  15. 攀枝花学院计算机专业单身率,重磅 | 攀枝花学院2018届毕业生就业质量年度报告...
  16. 激光雷达+imu_激光雷达——定位
  17. c++对象模型探索-王健伟-专题视频课程
  18. 计算机中 加减运算 的 实现原理
  19. 重磅!京东云自研第四代云主机发布;曝国外物理学家开发出用于量子计算机的汇编语言...
  20. 二手平台android界面,Android二手书交易app设计(2)启动图Activity

热门文章

  1. NAT 类型及检测方法
  2. 展示一下香蕉派路由Android系统
  3. IOS 图片拉伸不变形
  4. java x_java - “x = x ++”后的x是什么?
  5. Android Studio Win7安装
  6. Prometheus架构与实践分享
  7. 功率MOSFET的正向导通等效电路
  8. UDF UDAF UDTF 区别
  9. TLE两行数与轨道六根数转换
  10. 【CSPJ】CSPJ小学组