接入图灵机器人实现XMPP

原创 2015年07月07日 15:23:36

接入图灵机器人实现XMPP

转载请注明出处

  • 注册图灵帐号密码,得到key
  • 逻辑处理

1.注册图灵信息。

网站地址: [ 图灵 ]
得到appkey

2.代码展示

<RelativeLayout 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"
    tools:context="com.yudehai.text.SecondActivity" >

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="50dip"
        android:textSize="20sp"
        android:gravity="center"
        android:text="客服美眉"
        android:background="#00ff00"
        />
    <ListView 
        android:id="@+id/listView"
        android:layout_marginTop="50dip"
        android:layout_marginBottom="50dip"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:stackFromBottom="true"
        ></ListView>
    <LinearLayout 
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="50dip"
        android:weightSum="4"
        >
        <EditText 
            android:id="@+id/message"
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:ems="8"
            />
        <Button 
            android:id="@+id/send"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:text="發送"
            android:layout_weight="1"
            android:gravity="center"
            />
    </LinearLayout>

</RelativeLayout>

其实也就是一个ListView 属性android:stackFromBottom=”true” 意思是从底部向上开始展示数据

public class SecondActivity extends Activity implements OnCallListener{

    /***
     * 图灵key
     * 替换为你自己的图灵Key
     */
    private static final String TULING_APPKEY="";
    private static final String Pre = "http://www.tuling123.com/openapi/api?key=";
    private ListView list;
    private Button send;
    private EditText edit;
    private List<String> lists;
    private MyAdapter adapter;
    private ToastUtils pro;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        pro = new ToastUtils(this);
        list = (ListView) findViewById(R.id.listView);
        lists = new ArrayList<String>();
        adapter = new MyAdapter(this,lists);
        list.setAdapter(adapter);
        send = (Button) findViewById(R.id.send);
        edit = (EditText) findViewById(R.id.message);
        send.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if(TextUtils.isEmpty(edit.getText().toString())){
                    Toast.makeText(SecondActivity.this, "不可爲空", Toast.LENGTH_SHORT).show();
                }else{
                    pro.showunclickToastAlong();
                    lists.add(edit.getText().toString());
                    adapter.notifyDataSetChanged();
                    //KEY&info=你漂亮么
                    new JsonAsyncTask(SecondActivity.this).execute(Pre+TULING_APPKEY+"&info="+edit.getText().toString());
                    View softview = SecondActivity.this.getWindow().peekDecorView();
                    if (softview != null && softview.getWindowToken() != null) {
                        InputMethodManager inputmanger = (InputMethodManager) SecondActivity.this
                                .getSystemService(MainActivity.INPUT_METHOD_SERVICE);
                        inputmanger.hideSoftInputFromWindow(softview.getWindowToken(), 0);
                    }
                    edit.setText("");
                }
            }
        });
    }


    @Override
    public void getMessage(String str) {
        pro.cancel();
        if(TextUtils.isEmpty(str)){
            lists.add("没网了,点你妹?");
        }else{
            lists.add(str);
        }
        adapter.notifyDataSetChanged();
        list.setSelection(lists.size()-1);
    }
}

代码其实很简单,只不过就是需要定义当返回为空或者访问失败自动填写一个数据,一行添加一行么,你懂的。解析用的是AsyncTask 详细了解请看AsyncTask详解
TULING_APPKEY只需要将这个key值填写成自己的key ,Pre的

顺便贡献一个仿苹果progress先上张效果图

这里写图片描述

代码其实也就是一个工具类

public class ToastProUtils {
private static ToastProUtils instanse = null;
private static Dialog dialog;
private static View view;
private TextView tv;

public synchronized static ToastProUtils getInstanse(Context context) {

    if (instanse == null) {
        instanse = new ToastProUtils();
    }
    dialog = new Dialog(context, R.style.MyDialogStyle);
    view = LayoutInflater.from(context).inflate(R.layout.progressbar_item,
            null);
    dialog.setContentView(view);
    ImageView progressImageView = (ImageView) view
            .findViewById(R.id.myloading_image_id);
    AnimationDrawable animationDrawable = (AnimationDrawable) progressImageView
            .getDrawable();
    animationDrawable.start();
    WindowManager wm = ((Activity) context).getWindowManager();
    Display display = wm.getDefaultDisplay();
    android.view.WindowManager.LayoutParams lp = dialog.getWindow()
            .getAttributes();
    lp.width = display.getWidth() / 3;
    lp.height = LayoutParams.WRAP_CONTENT;
    dialog.getWindow().setAttributes(lp);
    return instanse;
}

private ToastProUtils() {

}

/**
 * 方法说明:
 * 
 */
public void show() {
    tv = null;
    tv = (TextView) view.findViewById(R.id.mylaodint_text_id);
    tv.setText("加载中...");
    if (dialog.isShowing()) {
        dialog.cancel();
        dialog.show();
    }
    dialog.show();
}
public void cancelKey(final boolean cancel){
    dialog.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface arg0, int arg1, KeyEvent arg2) {
            if (arg1 == KeyEvent.KEYCODE_BACK){
                if(cancel)
                    return false;
                else
                    return true;
            }
            return false;
        }
    });
}
public void unclickshow() {
    if (dialog.isShowing()) {
        dialog.cancel();
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    } else {
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }
}

public void showstr(String str) {
    tv = null;
    tv = (TextView) view.findViewById(R.id.mylaodint_text_id);
    tv.setText(str);
    if (dialog.isShowing()) {
        dialog.cancel();
        dialog.show();
    }
    dialog.show();
}

public void unclickshowstr(String str) {
    tv = null;
    tv = (TextView) view.findViewById(R.id.mylaodint_text_id);
    tv.setText(str);
    if(dialog.isShowing()){
        dialog.cancel();
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    } else {
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }
}

public void cancle() {
    if (dialog == null) {
        return;
    } else {
        dialog.cancel();
        tv =null;
    }
};

public void setStr(String str){
    tv = null;
    tv = (TextView) view.findViewById(R.id.mylaodint_text_id);
    tv.setText(str);
}

}

public class ToastUtils {
    private static final String TAG = "ToastUtils";
    private static Context mContext;
    private static String str = "";
    private ToastProUtils progress=null;

    public ToastUtils(Context context, String str) {
        if(progress==null){
            this.mContext = context;
            this.str = str;
            progress = ToastProUtils.getInstanse(context);
        }
    }

    public ToastUtils(Context context) {
        if(progress==null){
        this.mContext = context;
        progress = ToastProUtils.getInstanse(context);
        }
    }


    public void cancel() {
        if(progress!=null){
        progress.cancle();
        }
        str="";

    }

    public void showToastAlong() {
        if (progress != null) {
            if ("".equals(str)) {
                progress.show();
            } else {
                progress.showstr(str);
            }
        } else {
            return;
        }
    }


    /***
     * 
     * 方法说明:进度显示
     *
     * @param str
     */
    public void setStr(String str){
        if (progress != null) {
            if (!TextUtils.isEmpty(str)) {
                progress.setStr(str);
            } else {

            }
        } else {
            return;
        }
    }

    /***
     * 
     * 方法说明:不可点击的Show
     *
     */
    public void showunclickToastAlong() {
        if (progress != null) {
            if ("".equals(str)) {

                progress.unclickshow();
            } else {
                progress.unclickshowstr(str);
            }
        } else {
            return;
        }
    }

    public void showToastAlong(long delay) {
        showToastAlong();
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                ToastUtils.this.cancel();
            }
        };
        timer.schedule(task, delay);
    }

    public static void showToast(Context context, String str) {
        Toast toast = Toast.makeText(context, str, Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
        toast.show();
    }

    public static void showLongToast(Context context, String str) {
        Toast toast = Toast.makeText(context, str, Toast.LENGTH_LONG);
        toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
        toast.show();
    }

    public void cancelDiaog(boolean cancel){
        if(progress!=null){
        progress.cancelKey(cancel);
        }
        progress=null;
        str="";

    }

Demo 下载地址 :图灵xmpp

第一次写博客 好紧张,欢迎各路大神指点

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

相关文章推荐

接入图灵机器人实现XMPP

接入图灵机器人实现XMPP转载请注明出处 注册图灵帐号密码,得到key 逻辑处理 1.注册图灵信息。网站地址: [ 图灵 ] 2.代码展示<RelativeLayout xmlns:android=...

图灵机器人SDK接入指南

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

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

图灵机器人API接入

//图灵机器人API接入 //官网申请的KEY,用于调用各种功能 $apiKey = “e8c190a005adc401867efd1ad2602f70”; //调用图灵...

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

前二天,看了Android 智能问答机器人的实现的博文,我们可以进入图灵机器人主页,根据平台接入的介绍,我们知道,主是要在客户端按一定的格式(key 必须 + userid get 非必须,上下文功...

图灵机器人之Python实现

学python也有一段时间了,最初也是被python简洁的理念所吸引入了这坑。所以每次用python写程序都是以解决问题为目标,不怎么喜欢做封装,感觉解决一件小事,十分钟的事非要花半小时封装个类反而违...

图灵机器人

最近做了一个和机器人聊天的App,还没有全部做完,我先整理出基本的功能,以后慢慢加(此版本为1.0)。 功能: 1.实现网络访问2.可以和机器人进行简单聊天3.在bean包中封装了四个机器人毛毛的...

个人微信接入图灵机器人(基于Python)

个人微信接入图灵机器人(基于Python)本文转自博客园 仅供学习 不对之处请各位大神多多指教 原文出处开发环境:Ubuntu14.04编程语言:Python2.71.在图灵机器人官网(http:/...

PHP CURL 图灵机器人

智能回复机器人,常用于客服、微信自动回复。。。本次我们主要讲解PHP CURL的用法 ——@Author 云天河Blog 本次CURL的使用 是围绕软件工程8大步骤来的 1问题定义 2可行性研究 ...

图灵机器人-Java/Android

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

微信图灵机器人

微信图灵机器人+订阅+图片回复
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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