Andrioid项目之九图灵机器人

Andrioid项目之九图灵机器人

要实现一个图灵机器人,首先需要在 http://www.tuling123.com/ 中注册,然后创建一个应用,

便可通过应用的API key使用图灵机器人。图灵机器人非常方便的一点是不需要添加额外的库类。

只需要get请求访问 http://www.tuling123.com/openapi/api 就可以获得json数据,

然后对json数据进行解析即可。

下面就用Json解析一下数据

Json解析格式:

一、 JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧,属于轻量级解析。

Json建构于两种结构:

1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 如:

{

“name”:”jackson”,

“age”:100

}

2、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)如:

{

“students”:

[

{“name”:”jackson”,“age”:100},

{“name”:”michael”,”age”:51}

]

}

下面具体来看一下图灵机器人的具体实现:

一:创建接口HttpGetData

<span style="font-size:14px;">package com.example.rootpeople1;

public interface HttpGetData {
	void getDataUrl(String data);
}
</span>

二:创建HttpData.java

package com.example.rootpeople1;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

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 android.os.AsyncTask;

public class HttpData extends AsyncTask<String, Void, String> {
	private HttpClient httpClient;
	private HttpGet  httpGet;
	private String url;
	private HttpResponse httpResponse;
	private HttpEntity httpEntity;
	private InputStream in;
	private HttpGetData listener;
	//请求的urL
	 public HttpData(String url,HttpGetData listener) {
			this.url=url;
			this.listener=listener;
		}
	@Override
	protected String doInBackground(String... params) {
		try {
			httpClient=new DefaultHttpClient();
			httpGet=new HttpGet(url);
			httpResponse=httpClient.execute(httpGet);
			httpEntity=httpResponse.getEntity();
			in=httpEntity.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) {
			// TODO: handle exception
		}
		return null;
	}
	@Override
	protected void onPostExecute(String result) {
		// TODO Auto-generated method stub6
	listener.getDataUrl(result);
		super.onPostExecute(result);
	}

}

三:创建ListData.java

package com.example.rootpeople1;

public class ListData {
	private String content;
	public static final  int send=1;
	public static final  int  receiver=2;
	private int flag;
	private String time;
	public String getTime() {
		return time;
	}

	public void setTime(String time) {
		this.time = 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 ListData(String content, int flag,String time) {
		super();
		setContent(content);
		setFlag(flag);
		setTime(time);

	}

}

四:TextAdapter.java

package com.example.rootpeople1;

import java.util.List;

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;

public class TextAdapter  extends BaseAdapter{
	private List<ListData> lists;
	private Context  mContext;
	private RelativeLayout layout;

	public TextAdapter(List<ListData> lists, Context mContext) {

		this.lists = lists;
		this.mContext = mContext;
	}

	public int getCount() {
		// TODO Auto-generated method stub
		return lists.size();
	}

	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return lists.get(position);
	}

	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		LayoutInflater  inflater=LayoutInflater.from(mContext);
		if(lists.get(position).getFlag()==ListData.receiver){
			layout=(RelativeLayout) inflater.inflate(R.layout.leftitem, null);
		}
		if(lists.get(position).getFlag()==ListData.send){
			layout=(RelativeLayout) inflater.inflate(R.layout.rightem, null);
		}
		TextView tv = (TextView) layout.findViewById(R.id.tv);
		TextView time= (TextView) layout.findViewById(R.id.time);
		time.setText(lists.get(position).getTime());
		tv.setText(lists.get(position).getContent());
		return layout;
	}

}

五:测试MainActivity.java

package com.example.rootpeople1;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
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 Activity implements HttpGetData,OnClickListener {
	private HttpData  httpdata;
	private List<ListData> list;
	private ListView lv;
	private Button  send_btn;
	private EditText sendtext;
	private String content_str;
	private TextAdapter adapter;
	private String [] welcomeArray;
	private double currenttime,oldTime=0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initeview();
	}
	private void initeview(){
		list=new ArrayList<ListData>();
		lv=(ListView) findViewById(R.id.lv);
		send_btn=(Button) findViewById(R.id.send_btn);
		sendtext=(EditText) findViewById(R.id.senText);
		send_btn.setOnClickListener(this);
		adapter=new TextAdapter(list,this);
		lv.setAdapter(adapter);
		ListData listData = null;
		listData=new ListData(getRandomWelcomeTips(), listData.receiver,getTime());
		System.out.println("时间"+listData);
		list.add(listData);

	}

	public void getDataUrl(String data) {
		// TODO Auto-generated method stub
		parseText(data);
	}
	public void parseText(String str){

		try {
			JSONObject jb=new JSONObject(str);
			/*System.out.println(jb.getString("code"));
			System.out.println(jb.getString("text"));*/
			ListData listData = null;
			listData=new ListData(jb.getString("text"),listData.receiver,getTime());
			System.out.println("时间"+listData);
			list.add(listData);
			adapter.notifyDataSetChanged();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	public void onClick(View v) {
		content_str=sendtext.getText().toString();
		sendtext.setText("");
		String dropk=content_str.replace(" ", "");
		String droph=dropk.replace("\n", "");
		ListData  listdata = null;
		listdata=new ListData(content_str,listdata.send,getTime());
		System.out.println("sfds"+listdata);
		list.add(listdata);
		if(list.size()>30){
			for(int i=0;i<list.size();i++){
				list.remove(i);
			}
		}
		adapter.notifyDataSetChanged();
		httpdata=(HttpData) new HttpData(
				"http://www.tuling123.com/openapi/api?key=5a4b5c8bbf2c8a9dd02861999fa0d45c&info="+droph,this).execute();

	}
	private String  getRandomWelcomeTips(){
		String welcome_tipe=null;
		welcomeArray=this.getResources().getStringArray(R.array.welcome_tips);
		int  index=(int) (Math.random()*(welcomeArray.length-1));
		welcome_tipe=welcomeArray[index];
		return welcome_tipe;
	}
	private String  getTime(){
		currenttime-=System.currentTimeMillis();
		SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		//SimpleDateFormat format=new SimpleDateFormat("HH:mm");
		Date curdata=new Date();
		String str=format.format(curdata);
		if(currenttime - oldTime >=5*60*1000){
			oldTime=currenttime;
			return  str;
		}else{
			return "";
		}

	}
}

UI布局文件

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <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:orientation="horizontal" >

        <EditText
            android:id="@+id/senText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
              android:background="@android:drawable/edit_text"
              />

        <Button
            android:id="@+id/send_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/send"

            />
    </LinearLayout>

</LinearLayout>

leftitem.xml

<?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="match_parent" >

    <TextView
        android:id="@+id/time"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/time"
        android:layout_marginLeft="45dp"
        android:layout_marginTop="55dp"
        android:background="@drawable/aio_friend_bg_nor_11"
        android:gravity="center" />

    <com.makeramen.roundedimageview.RoundedImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/iv"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:gravity="center_horizontal"
            android:src="@drawable/test_photo"
            app:riv_border_color="#333333"
            app:riv_border_width="3dip"
            app:riv_corner_radius="10dip"
            app:riv_mutate_background="true"
            app:riv_oval="true" />

</RelativeLayout>

rightem.xml

<?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="match_parent"
    android:orientation="vertical"
   >
     <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:id="@+id/time"

        />

    <TextView
         android:layout_below="@id/iv"
        android:layout_marginLeft="55dp"
        android:layout_toLeftOf="@id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv"
        android:background="@drawable/aio_user_bg_nor_11"
        android:gravity="center"
        />

    <com.makeramen.roundedimageview.RoundedImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/iv"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/time"
        android:src="@drawable/picture"
        app:riv_border_color="#333333"
        app:riv_border_width="3dip"
        app:riv_corner_radius="10dip"
        app:riv_mutate_background="true"
        app:riv_oval="true" />

</RelativeLayout>

最终运行界面:

如需源码请点击连接下载:

http://pan.baidu.com/s/1gfbKRcv

密码 eyb2

时间: 2024-08-26 21:52:34

Andrioid项目之九图灵机器人的相关文章

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

空暇之余.想到上次看过的一个图灵机器人开发视频.直接上其官网看开发人员手冊,自己动手写了一个图灵机器人小应用.编写的思路基本和网上的一些开发视频不谋而合,都是网络訪问+json解析,再者就是设计出好看的界面.有兴趣的同学能够依据自己的需求进行更改甚至细化里面的查询功能,全然能够做出一款完整的app应用. 先上图看看我的demo效果: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JB

图灵机器人:到基层去,做人工智能的开放平台

你有多久没和小冰聊天了? 这个由微软在今年端午节时所推出的"16岁萌妹子"曾在刚开始受到了相当多的关注,无论是迅速入驻各微信聊天群,还是后来在新浪微博等平台的复活,这个背着"聊天"外壳的虚拟机器人更多地被人看做是微软在人工智能领域的尝试.根据之前的媒体报道,小冰其实是微软Windows Phone 在推出 Cortana 语音助手(中文名小娜)之前的预热产品,和类似于苹果 Siri 女秘书形象的小娜不同,小冰扮演的是个没太多实际功用的角色,即在被调戏与调戏之间陪用户

智能机器人“小昆”的实现(一)项目介绍以及图灵授权认证

一.项目介绍 这个小项目开发了一个叫做“小昆”的图灵智能机器人,它可以陪你聊天,听你抱怨.而且可以在后台设置机器人知识库,打造你的专属智能机器人.我们先看几张运行的效果图,介绍一下项目吧.如下图: 功能说明:其实很简单,只要你在编辑框中输入你想要对机器人小昆说的话,然后点击发送按钮(即那个蝴蝶),就可以愉快的跟小昆聊天了. 原理说明:本项目智能机器人小昆的实现主要是调用了第三方的API,即图灵机器人的接口.而其他的模块则是android原生的代码编写.并不算是复杂. 通过本项目你可以学习到: (

关于图灵机器人访问网址中中文编码的问题(C++下 UrlEncode编码过程)

最近在开发智能家居,子模块中调用了图灵机器人(http://tuling123.com/openapi/cloud/home.jsp) 但是发现一直不成功,返回值一直是 40006  百般调试无果  最后发现是中文转码的问题  一般网址都会讲中文进行一次转码,暂且称作 UrlEncode 转码过程很简单,因为中文编码不是一个字节,而是多个字节(ASCLL码为两个, Unicode码为三个),转码过程实际上就是将中文字符按字节输出为 : %+该字节十六进制表达式 例如 '啊' 字按位输出 则为 则

微信小程序开发—项目实战之聊天机器人

我参加CSDN博客之星评选啦,感谢大家前往投票支持! 投票地址:http://blog.csdn.net/vote/list.html?keyword=anda0109#search 项目功能介绍 人工智能虚拟机器人"微软小冰"大家玩过吧,很酷的一个应用.发送文字.语音和图片都能得到智能的回复. 那现在我们就用小程序做一个模拟的应用,智能聊天机器人.发送文字它可以回复一段话,或一张图片,是不是有点小酷! 下面是小程序开发的一个智能聊天机器人的应用界面: 当然,这种智能回复的算法和数据库

调用图灵机器人API实现简单聊天

昨天突然想在Android下调用图灵机器人API实现聊天的功能.说干就干,虽然过程中遇见一些问题,但最后解决了的心情真好. API接口是(key值可以在图灵机器人网站里注册得到) www.tuling123.com/openapi/api?key=1702c05fc1b94e2bb4de7fb2e61b21a3&info=hello 最后hello是讲的话,访问这个网站会访问一个JSON格式的内容. text关键字就是访问的内容,只要把这个关键字的内容截取下列就行了. 下面开始写代码. 首先布个

图灵机器人,web录音实现自动化交互问答

一.图灵机器人 介绍 图灵机器人是以语义技术为核心驱动的人工智能公司,致力于"让机器理解世界",产品服务包括机器人开放平台.机器人os和场景方案.\ 官方地址为: http://www.tuling123.com/ 使用 首先得注册一个账号,或者使用第3方登录,都可以. 登录之后,点击创建机器人 机器人名称,可以是自己定义的名字 选择网站->教育学习->其他 输入简介 创建成功之后,点击终端设置,拉到最后. 可以看到api接入,下面有一个apikey,待会会用到 右侧有一个

机器人api(图灵机器人)

图灵机器人,是基于自然语言解析的智能机器人,已经免费开放了机器人api接口,有需求的同学能够去试试. 图灵机器人官网:http://www.tuling123.com 图灵机器人体验:http://www.tuling123.com/openapi/cloud/proexp.jsp

使用图灵机器人笑话功能提高微信公众帐号活跃度

概要: 微信公众帐号早已经"泛滥成灾",虽然如此,各企业商家还是费尽心思在上面做文章,以免"错失商机".然而,微信公众帐号的活跃度可为掺不忍睹,除了极个别的知名服务行业帐号每天有上千次交互外,其余基本"无人问津". 为了解决这一难题,提高微信活跃度,本次教程以java开发为例,介绍如通过图灵机器人api接口在微信公众帐号中加入笑话功能. 通过增加其趣味娱乐性,可以有效提高用户粘度,在保证关注量的同时,实现公众帐号应有的价值. 本文重点介绍笑话功能