智慧機器人的快速實現

uoou發表於2015-05-25

藉助圖靈機器人提供的API,可讓你的APP變得更聰明,更智慧
1.ChatMessage

package com.example.android_robot_01.bean;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ChatMessage
{

/**
 * 訊息型別
 */
private Type type ;
/**
 * 訊息內容
 */
private String msg;
/**
 * 日期
 */
private Date date;
/**
 * 日期的字串格式
 */
private String dateStr;
/**
 * 傳送人
 */
private String name;

public enum Type
{
    INPUT, OUTPUT
}

public ChatMessage()
{
}

public ChatMessage(Type type, String msg)
{
    super();
    this.type = type;
    this.msg = msg;
    setDate(new Date());
}

public String getDateStr()
{
    return dateStr;
}

public Date getDate()
{
    return date;
}

public void setDate(Date date)
{
    this.date = date;
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    this.dateStr = df.format(date);

}

public String getName()
{
    return name;
}

public void setName(String name)
{
    this.name = name;
}

public Type getType()
{
    return type;
}

public void setType(Type type)
{
    this.type = type;
}

public String getMsg()
{
    return msg;
}

public void setMsg(String msg)
{
    this.msg = msg;
}

}

2.CommonException

 package com.example.android_robot_01.bean;

 public class CommonException extends RuntimeException
{

public CommonException()
{
    super();
    // TODO Auto-generated constructor stub
}

public CommonException(String detailMessage, Throwable throwable)
{
    super(detailMessage, throwable);
    // TODO Auto-generated constructor stub
}

public CommonException(String detailMessage)
{
    super(detailMessage);
    // TODO Auto-generated constructor stub
}

public CommonException(Throwable throwable)
{
    super(throwable);
    // TODO Auto-generated constructor stub
}

}

3.ChatMessageAdapter

package com.example.android_robot_01;

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.TextView;

import com.example.android_robot_01.bean.ChatMessage;
import com.example.android_robot_01.bean.ChatMessage.Type;

public class ChatMessageAdapter extends BaseAdapter
{
private LayoutInflater mInflater;
private List<ChatMessage> mDatas;

public ChatMessageAdapter(Context context, List<ChatMessage> datas)
{
    mInflater = LayoutInflater.from(context);
    mDatas = datas;
}

@Override
public int getCount()
{
    return mDatas.size();
}

@Override
public Object getItem(int position)
{
    return mDatas.get(position);
}

@Override
public long getItemId(int position)
{
    return position;
}

/**
 * 接受到訊息為1,傳送訊息為0
 */
@Override
public int getItemViewType(int position)
{
    ChatMessage msg = mDatas.get(position);
    return msg.getType() == Type.INPUT ? 1 : 0;
}

@Override
public int getViewTypeCount()
{
    return 2;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    ChatMessage chatMessage = mDatas.get(position);

    ViewHolder viewHolder = null;

    if (convertView == null)
    {
        viewHolder = new ViewHolder();
        if (chatMessage.getType() == Type.INPUT)
        {
            convertView = mInflater.inflate(R.layout.main_chat_from_msg,
                    parent, false);
            viewHolder.createDate = (TextView) convertView
                    .findViewById(R.id.chat_from_createDate);
            viewHolder.content = (TextView) convertView
                    .findViewById(R.id.chat_from_content);
            convertView.setTag(viewHolder);
        } else
        {
            convertView = mInflater.inflate(R.layout.main_chat_send_msg,
                    null);

            viewHolder.createDate = (TextView) convertView
                    .findViewById(R.id.chat_send_createDate);
            viewHolder.content = (TextView) convertView
                    .findViewById(R.id.chat_send_content);
            convertView.setTag(viewHolder);
        }

    } else
    {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.content.setText(chatMessage.getMsg());
    viewHolder.createDate.setText(chatMessage.getDateStr());

    return convertView;
}

private class ViewHolder
{
    public TextView createDate;
    public TextView name;
    public TextView content;
}

}

4.MainActivity

package com.example.android_robot_01;

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

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import com.example.android_robot_01.bean.ChatMessage;
import com.example.android_robot_01.bean.ChatMessage.Type;
import com.zhy.utils.HttpUtils;

public class MainActivity extends Activity
{
/**
 * 展示訊息的listview
 */
private ListView mChatView;
/**
 * 文字域
 */
private EditText mMsg;
/**
 * 儲存聊天訊息
 */
private List<ChatMessage> mDatas = new ArrayList<ChatMessage>();
/**
 * 介面卡
 */
private ChatMessageAdapter mAdapter;

private Handler mHandler = new Handler()
{
    public void handleMessage(android.os.Message msg)
    {
        ChatMessage from = (ChatMessage) msg.obj;
        mDatas.add(from);
        mAdapter.notifyDataSetChanged();
        mChatView.setSelection(mDatas.size() - 1);
    };
};

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main_chatting);

    initView();

    mAdapter = new ChatMessageAdapter(this, mDatas);
    mChatView.setAdapter(mAdapter);

}

private void initView()
{
    mChatView = (ListView) findViewById(R.id.id_chat_listView);
    mMsg = (EditText) findViewById(R.id.id_chat_msg);
    mDatas.add(new ChatMessage(Type.INPUT, "我是小貅貅,很高興為您服務"));
}

public void sendMessage(View view)
{
    final String msg = mMsg.getText().toString();
    if (TextUtils.isEmpty(msg))
    {
        Toast.makeText(this, "您還沒有填寫資訊呢...", Toast.LENGTH_SHORT).show();
        return;
    }

    ChatMessage to = new ChatMessage(Type.OUTPUT, msg);
    to.setDate(new Date());
    mDatas.add(to);

    mAdapter.notifyDataSetChanged();
    mChatView.setSelection(mDatas.size() - 1);

    mMsg.setText("");

    // 關閉軟鍵盤
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    // 得到InputMethodManager的例項
    if (imm.isActive())
    {
        // 如果開啟
        imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
                InputMethodManager.HIDE_NOT_ALWAYS);
        // 關閉軟鍵盤,開啟方法相同,這個方法是切換開啟與關閉狀態的
    }

    new Thread()
    {
        public void run()
        {
            ChatMessage from = null;
            try
            {
                from = HttpUtils.sendMsg(msg);
            } catch (Exception e)
            {
                from = new ChatMessage(Type.INPUT, "伺服器掛了呢...");
            }
            Message message = Message.obtain();
            message.obj = from;
            mHandler.sendMessage(message);
        };
    }.start();

}

}

相關文章