此功能主要原理:
1.接入图灵机器人api,拼接上你输入框的消息;
2.根据api完成网络请求消息的接收与发送
3.完成布局页面
4.实现你和小洛的对话
废话不多说,直接上图和代码
拼接方法:http://www.tuling123.com/openapi/api?key=你自己的apikey&info=你要发送的话&userid=你自己的唯一标示(在代码中会指出)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- transcriptMode 自动向下滚动 alwaysScroll一直向下滚动状态; divider设置间隔线效果 ; listSelector设置没有滑动效果 -->
<ListView
android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@null"
android:listSelector="@android:color/transparent"
android:transcriptMode="alwaysScroll" >
</ListView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#229dec"
android:orientation="horizontal" >
<EditText
android:id="@+id/et_sendText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="7dp"
android:layout_weight="1"
android:background="@drawable/bg_edittext_selector"
android:paddingBottom="7dp"
android:paddingTop="7dp" />
<Button
android:id="@+id/btn_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:background="@drawable/bg_button"
android:text="发送" />
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_time"
android:layout_width="fill_parent"
android:gravity="center_horizontal"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_alignParentLeft="true"
android:layout_below="@id/tv_time"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:src="@drawable/by2" />
<TextView
android:layout_below="@id/tv_time"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:layout_toRightOf="@id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:id="@+id/tv"
android:gravity="center"
android:background="@drawable/left"/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_time"
android:layout_width="fill_parent"
android:gravity="center_horizontal"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/iv"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_alignParentRight="true"
android:layout_below="@id/tv_time"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:src="@drawable/by5" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_time"
android:layout_marginLeft="10dp"
android:layout_marginTop="14dp"
android:layout_toLeftOf="@id/iv"
android:background="@drawable/right"
android:gravity="center"
android:padding="12dp" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#FFFFFF" />
<corners android:radius="5dip" />
<stroke
android:width="1dip"
android:color="#BDC7D8" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#80cccf" /> <!-- 背景色 -->
<stroke
android:width="0.01dp"
android:color="#80cccf" /> <!-- 邊框的顏色 -->
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
package robot.com.myapplication;
import android.os.AsyncTask;
import android.util.Log;
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 HttpData extends AsyncTask<String, Void, String> {
private HttpClient httpClient;
private HttpGet httpGet;
private HttpResponse httpResponse; //��ȡ���ص�����
private HttpEntity httpEntity;//����httpʵ��
private InputStream in; //����ȡ��������ת��Ϊ���ļ�
private HttpGetDataListener listener;//ʵ���Զ����HttpGetDataListener�ӿ�,���ҹ��컯���ݲ���
private String url;
public HttpData(String url ,HttpGetDataListener listener) {
this.url = url;
this.listener = listener;
}
@Override
protected String doInBackground(String... params) {
//ʵ�ֽӿں���д�˷���,�˷����������ǣ�����get�����ȡ����
try {
httpClient = new DefaultHttpClient();//ʵ�����ͻ���
httpGet = new HttpGet(url);//ʹ��get��ʽ��ͨ������URL������
httpResponse = httpClient.execute(httpGet); //ͨ���ͻ��˷�������
httpEntity = httpResponse.getEntity();//ͨ��httpResponse�����ȡ����
Log.i("haha1", "----------"+httpEntity.toString());
in = httpEntity.getContent();//��ȡʵ��ľ�������
BufferedReader br = new BufferedReader(new InputStreamReader(in));//��ȡ���������ݺ�ͨ�����������ж�ȡ
Log.i("haha2", "----------"+br.toString());
String line = null; //��ȡ����
StringBuffer sb = new StringBuffer();//������������
while((line = br.readLine()) != null){
//��ȡ������������
sb.append(line); //�洢���ݵ�StringBuffer��
}
Log.i("haha3", "----------"+sb.toString());
return sb.toString();//ת��ΪString����
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
/**����
* ��д�˷�����ͨ���ⷽ����ȡ����
*/
@Override
protected void onPostExecute(String result) {
listener.getDataUrl(result);//��������
Log.i("haha4", "----------"+result);
super.onPostExecute(result);
}
}
package robot.com.myapplication;
public interface HttpGetDataListener {
void getDataUrl(String data);
}
package robot.com.myapplication;
/**
*
*/
public class ListData {
public static final int SEND = 1;
public static final int RECEIVE = 2;
private String content;
private int flag;//��ʶ
private String time;
public ListData(String content, int flag, String time) {
setContent(content);
setFlag(flag);
setTime(time);
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
package robot.com.myapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.List;
/**
*
*/
public class TextAdapter extends BaseAdapter{
private List<ListData> lists;//���ϵ���������
private Context mContext;//�н������ĵ�Context
private RelativeLayout layout;
public TextAdapter(List<ListData> lists, Context mContext) {
this.lists = lists;
this.mContext = mContext;
}
@Override
public int getCount() {
//����lists�����ص�����
return lists.size();
}
@Override
public Object getItem(int position) {
return lists.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(mContext);
if(lists.get(position).getFlag() == ListData.RECEIVE){
layout = (RelativeLayout) inflater.inflate(R.layout.leftitem, null);
}
if(lists.get(position).getFlag() == ListData.SEND){
layout = (RelativeLayout) inflater.inflate(R.layout.rightitem, null);
}
TextView tv = (TextView) layout.findViewById(R.id.tv);//�Ի�textView
TextView tv_time = (TextView) layout.findViewById(R.id.tv_time);//ʱ��textView
tv.setText(lists.get(position).getContent()); //���������ݷ��MTextView��
tv_time.setText(lists.get(position).getTime());//���¼�д��TextView
return layout;
}
}
package robot.com.myapplication;
import android.view.View;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity implements
HttpGetDataListener,View.OnClickListener {
private HttpData httpData;// �첽�������
private List<ListData> lists;
private ListView lv;
private EditText et_sendText;
private Button btn_send;
private String content_str; // �惦��EditText�@ȡ���Ĕ���
private TextAdapter adapter;
private String[] welcome_arry;//��ӭ��
private double currentTime,oldTime = 0;//�Ի�ʱ��
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("haha7", "----------7");
initView();
Log.i("haha8", "----------8");
}
/**
* ʵ��������
*/
private void initView(){
lists = new ArrayList<ListData>();
lv = (ListView) findViewById(R.id.lv);
et_sendText = (EditText) findViewById(R.id.et_sendText);
btn_send = (Button) findViewById(R.id.btn_send);
btn_send.setOnClickListener(this);
adapter = new TextAdapter(lists, this);
lv.setAdapter(adapter);//��adapter
ListData listData;
listData = new ListData(getRandomWelcomeTips(),ListData.RECEIVE, getTime());
lists.add(listData);//��ӻ�ӭ��
}
/**
* ���û�ӭ��
*/
public String getRandomWelcomeTips(){
// String welcome_tip = null;
// welcome_arry = this.getResources().getStringArray(getResources().getString(R.string.welcome_tips));//��string.xml�л�ȡ��Ϊwelcome_tips���ַ�������
// int index = (int)(Math.random()*(welcome_arry.length - 1));//��ȡһ�������
// welcome_tip = welcome_arry[index];
return getResources().getString(R.string.welcome_tips);
}
/**
* ����ʱ��
* @return
*/
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){
//�������5���ӣ���ʾʱ��
oldTime = currentTime;
return str;
}else{
return "";
}
}
@Override
public void getDataUrl(String data) {
Log.i("haha---data=","------" + data);
parseText(data);
}
public void parseText(String str){
//����json
try {
JSONObject jb = new JSONObject(str);
ListData listData;
listData = new ListData(jb.getString("text"),ListData.RECEIVE, getTime());
lists.add(listData);
adapter.notifyDataSetChanged();//�����m�䣿��
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
getTime();//����ʱ��
content_str = et_sendText.getText().toString();//�@ȡEditText����
et_sendText.setText("");
String dropk = content_str.replace(" ", "");//ȥ���ո�
String droph = dropk.replace("\n", "");//ȥ���س�
ListData listData;
listData = new ListData(content_str, ListData.SEND, getTime());
lists.add(listData);
Log.i("haha9", "----------content_str="+content_str);
adapter.notifyDataSetChanged();//ˢ��
Log.i("haha6", "----------content_str="+content_str);
httpData = (HttpData) new HttpData(
"http://www.tuling123.com/openapi/api?key=02dfb86de93f8a3e81dabd214a50c8fa&info=" + droph + "&userid=15602229049",
this).execute();// �����Ѿ�ȥ���ո�ͻس�content_str������droph ; execute()�����첽ͨ��
Log.i("haha5", "----------"+httpData);
if(lists.size() > 30){
//�����Ļ�ϵĶԻ����ݶ���30�����Ƴ�ǰ�������
for (int i = 0; i < lists.size(); i++) {
lists.remove(i);
}
}
}
}
<uses-permission android:name="android.permission.INTERNET" />
下载地址:Android开发之智能聊天机器人
至此,一个智能聊天机器人就实现了,你可以尽情的和它玩耍了,记住别玩坏了哦
不懂的地方可以问我哦
文章浏览阅读570次。对于大部分差友们来说,“开发者大会”这个词一定显得陌生而又遥远,跟普通的产品发布会不一样,他们面向的对象并不是普通的消费者,而是各种程序猿和攻城狮。话又说回来,能开“ 开发者大会”,也说明这个企业已经牛逼到了一定程度。。譬如每年的谷歌开发者大会,苹果的WWDC 都受到超多人关注,因为千千万万开发者就是依靠着安卓和iOS 生态创造价值,它们的任何更新和变动都引领着未来互联网的走向。这种会议完全是企业..._华为鸿蒙系统能代替安卓吗
文章浏览阅读1.4w次,点赞2次,收藏23次。一. linux下运行jar包的命令1、java -jar xxxxx.jar // 当前xshell窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出2、java -jar xxxxx.jar & //当前shell窗口不被锁定,但是当窗口关闭时,程序中止运行。3、nohup Java -jar xxxxxx.jar & //意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行二. 下面详细介绍第三种运行方式/*下面介绍如何关闭第三种运行的jar包程序/_linux执行jar包命令带参数
文章浏览阅读1.2w次。问题编写一个函数,其作用是将输入的字符串反转过来。输入: "hello"输出: "olleh"输入: "A man, a plan, a canal: Panama"输出: "amanaP :lanac a ,nalp a ,nam A"Write a function that takes a string as input and returns the str..._c#将任意字符串反转输出
文章浏览阅读1.6k次。前言 关于代码与文件交互方式的选择,基本常用的有以下三种,与txt格式的文本文件交互,与ini格式的配置文件交互,与xml类型的文件交互。考虑到交互数据为游戏数据,因此采用第3种。文本利用C#的正反序列化技术来实现游戏数据文件的读取和写入。准备工作 本人使用的开发环境为VisualStudio2019..._游戏data文件怎么编辑
文章浏览阅读4.2w次,点赞6次,收藏20次。1.If函数:if和case差不多,都是处理单个列的查询结果语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)返回值: T说明:当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull举例:if(条件表达式,结果1,结果2)相当于java中的三目运算符..._hive if
文章浏览阅读1k次。腾讯扩大了视频号的内测范围,很多的朋友都收到了视频号的邀请,每个人都觉得视频号是一个创业的契机,最起码站在了风口的边缘,似乎明天注册公司,后天就能出任CEO迎接白富美了。对于视频号的这个机会,很不好意思,我先帮您泼一盆冷水,没有正确的追风的姿势,最后还是安然离场! 历来的风口,抓住了哪个? 从微博到公众号,从公众号到头条,从头条到抖音,每一次都是一个机会,现在看看很多人还不是一样,看..._腾讯视频号服务外包怎么做
文章浏览阅读9.4k次,点赞15次,收藏98次。信号完整性之阻抗匹配与端接方法1. 前言随着电子技术的发展,电路的规模越来越大,单个器件集成的功能越来越多,速率越来越高,而器件的尺寸越来越小。由于器件尺寸的减小,器件引脚信号变化沿的速率变得越来越高,导致SI问题越来越突出。SI (Signal Integrity,信号完整性)与以下几个因素有关:反射、串扰、辐射。反射是由信号传输路径上的阻抗不连续造成的;串扰与信号的间距有关;辐射则与高速器件自身以及PCB设计均有关。2. 信号的阻抗匹配信号的阻抗匹配是影响信号完整性最主要的._传输线的阻抗匹配和端接方式
文章浏览阅读1.7k次,点赞2次,收藏5次。Adobe After Efftects(简称为 Ae )可以帮助用户高效且精确地创建无数种引人注目的动态图形和震撼人心的视觉效果,利用与其他 Adobe 软件紧密集成和高度灵活的二维和三..._ae视频渲染从入门到精通 csdn
文章浏览阅读479次。Android为了屏蔽进程的概念,利用不同的组件[Activity、Service]来表示进程之间的通信!组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Service,不论这个Activity或Service是属于当前应用还是其它应用的! _ipc机制和消息机制
文章浏览阅读38次。我比较推荐的方法是在创建数据库时便设置中文编码create database bp default character set utf8; #注意是utf8不是utf-8以下方法只适用于mysql5.5以上版本的(其实我的是mariadb5.5版本的) 编辑mysql配置文件[root@localhost ~]# cat /etc/my.cnf..._群晖 mysql5.6 中文乱码
文章浏览阅读1w次,点赞12次,收藏140次。软硬件环境:python 3.6.5Ubuntu 18.04 LTSPytorch 1.1.0NVIDIA TITAN XP 8GB项目链接https://github.com/open-mmlab/mmskeleton准备工作先准备数据集准备环境,包含两步:第一步: 进入文件夹./deprecated/origin_stgcn_repo/ ,打开requirements.txt看下需要满足的环境条件,conda list:我不直接安装requirements.txt中的需求原因是,_hrnet提取骨架
文章浏览阅读1.7k次。分支限界法TSP问题//分支限界法#include<iostream>#include<algorithm>#include<cstdio>#include<queue>const int INF = 100000;const int MAX_N = 22;using namespace std;//n*n的一个矩阵int n;int cost[MAX_N][MAX_N];//最少3个点,最多MAX_N个点struct Node{