多语言展示
当前在线:1016今日阅读:27今日分享:41

怎么做一个安卓聊天机器人

教你怎么做一个简单的Android智能聊天机器人,适合学习安卓的新手。
工具/原料
1

eclipse

2

ADT

3

android-SDK

4

JDK

方法/步骤
2

把API key 复制下来放在一个记事本,之后要在代码中用的。

3

先新建一个Android工程,我的工程名为:Person,源代码在com.shenbin.person包下,MainActivity是Android的activity。还包括HttpDate类,HttpGetDateListener类,ListDate类,TextAdapter类

4

//MainActivity代码:/*下面的代码修改httpDate = (HttpDate) new HttpDate('http://www.tuling123.com/openapi/api?key=********&info='  +droph,this).execute(); 把********替换成自己的API key*/ package com.shenbin.person;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.app.Activity;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 HttpGetDateListener,OnClickListener{ //实现接口 private HttpDate httpDate;  private List lists; private ListView lv; private EditText getText; private Button send_btn; private String content_str; private TextAdapter adapter; private String [] welcome_array; private double currentTime,oldTime = 0;  @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);    initView();  //httpDate = (HttpDate) new HttpDate('http://www.tuling123.com/openapi/api?key=5692c0d167fc5a180d092efaab578617&info=你好',    //this).execute(); } private void initView() {  lv = (ListView) findViewById(R.id.lv);  getText = (EditText) findViewById(R.id.sendText);  send_btn = (Button) findViewById(R.id.send_btn);  //send_btn.setOnClickListener((android.view.View.OnClickListener) this);  send_btn.setOnClickListener(this);  lists = new ArrayList();    adapter = new TextAdapter(lists, this);  lv.setAdapter(adapter);    ListDate listDate = null ;  listDate = new ListDate(getRandomWelcomeTips(),listDate.RECEIVER,getTime());  lists.add(listDate); }  private String getRandomWelcomeTips() {  String welcome_tip = null;  welcome_array = this.getResources().getStringArray(R.array.welcome_tips);  //获得string。xml的欢迎语  int index = (int) (Math.random()*(welcome_array.length-1));  welcome_tip = welcome_array[index];  return welcome_tip; }  @Override public void getDateUrl(String date) {  // TODO 自动生成的方法存根  //System.out.println(date);  parseText(date); }  public void parseText(String str) {    try {   JSONObject jb = new JSONObject(str);      //System.out.println(jb.getString('code'));   //System.out.println(jb.getString('text'));   ListDate listDate = null;   listDate = new ListDate(jb.getString('text'),listDate.RECEIVER,getTime());   lists.add(listDate);   adapter.notifyDataSetChanged();     } catch (JSONException e) {   // TODO 自动生成的 catch 块   e.printStackTrace();  }   } @Override public void onClick(View v) {    getTime();  content_str = getText.getText().toString();  getText.setText('');  String dropk = content_str.replace(' ', '');  String droph = dropk.replace('\n', '');    ListDate listDate;  listDate = new ListDate(content_str,ListDate.SEND,getTime());  lists.add(listDate);    //如果太多了,就移除一些  if (lists.size() > 30) {   for (int i = 0; i < lists.size(); i++) {    lists.remove(i);       }  }    adapter.notifyDataSetChanged();    httpDate = (HttpDate) new HttpDate('http://www.tuling123.com/openapi/api?key=********&info='  +droph,this).execute(); }  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) {   oldTime = currentTime;   return str;  }else {   return '';  } } }

5

//HttpDate类代码 package com.shenbin.person;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 HttpDate extends  AsyncTask{  private HttpClient mHttpClient;   //客户端 private HttpGet mHttpGet;          //请求方式为get private String url;                //请求的地址 private HttpResponse mHttpResponse;   //请求返还 private HttpEntity mHttpEntity;    //创建实体 private InputStream in; private HttpGetDateListener listener;     //获得接口 public HttpDate(String url,HttpGetDateListener listener) {  this.url = url;  this.listener = listener; }  @Override protected String doInBackground(String... arg0) {  // TODO 自动生成的方法存根  try {      mHttpClient = new DefaultHttpClient();   //实例化客户端   mHttpGet = new HttpGet(url);                    mHttpResponse = mHttpClient.execute(mHttpGet);   mHttpEntity = mHttpResponse.getEntity();   in = mHttpEntity.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 自动生成的方法存根  listener.getDateUrl(result);    super.onPostExecute(result); }}

6

//HttpGetDateListener类代码//接口 package com.shenbin.person;public interface HttpGetDateListener { void getDateUrl(String date);}

7

//ListDate类代码 package com.shenbin.person;import android.R.integer;public class ListDate {  private String content; public static final int SEND = 1; public static final int RECEIVER = 2; private int flag; private String time;  public ListDate(String content,int flag,String time) {  // TODO 自动生成的构造函数存根  setContent(content);  setFlag(flag);  setTime(time); }  public void setContent(String content) {  this.content = content; } public String getContent() {  return 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; }}

8

//TextAdapter类代码 package com.shenbin.person;import java.net.ContentHandler;import java.util.List;import javax.security.auth.PrivateCredentialPermission;import android.R.layout;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.webkit.WebView.FindListener;import android.widget.BaseAdapter;import android.widget.RelativeLayout;import android.widget.TextView;public class TextAdapter extends BaseAdapter{  private List lists; private Context nContext; private RelativeLayout layout;  public TextAdapter(List lists,Context nContext) {  this.lists = lists;  this.nContext = nContext; } @Override public int getCount() {  // TODO 自动生成的方法存根  return lists.size(); } @Override public Object getItem(int pesition) {    return lists.get(pesition); } @Override public long getItemId(int pesition) {  // TODO 自动生成的方法存根  return pesition; } @Override public View getView(int pesition, View converView , ViewGroup parent) {    LayoutInflater inflater = LayoutInflater.from(nContext);    if (lists.get(pesition).getFlag() == ListDate.RECEIVER) {   layout = (RelativeLayout) inflater.inflate(R.layout.leftitem, null);  }  if (lists.get(pesition).getFlag() == ListDate.SEND) {   layout = (RelativeLayout) inflater.inflate(R.layout.rightitem, null);  }    TextView tv = (TextView) layout.findViewById(R.id.tv);  tv.setText(lists.get(pesition).getContent());    TextView time = (TextView) layout.findViewById(R.id.time);  time.setText(lists.get(pesition).getTime());    return layout; }}

9

activity_main.xml的代码:                                             

10

leftitem.xml代码                                      

11

rightitem.xml代码                                 

12

values文件下的strings.xml代码     小兵机器人    Settings    小兵聊天机器人        发送                主人,奴婢在此等候多时了        主人,近来可好        欢迎归来,我亲爱的主人        主人,我好想你啊        主人,你越来越靓啦        我是小兵机器人,很高兴陪你聊天        我就是聪明,可爱的小兵机器人        hello,美女(帅锅)        你是我的小呀小苹果        开心的话,可以找我聊天,不开心更要找我聊天啦   

13

AndroidManifest.xml的代码添加的代码为加黑的粗体。                                                                                            

注意事项
1

开发环境要搭建好

2

真机测试效果比较好,需要的三张图片是步骤9-11的图片,也可以自己去寻找合适的图片替换

3

需要apk安卓安装包的私信我

4

运行需要联网。

推荐信息