图灵智能对话机器人DEMO
2016-10-08 14:36
405 查看
PS:
目前还有点bug,会继续修正
存在问题:当对话到达30个或以上只删除了机器人的消息。
1、main布局和头像+对话框布局
2、得到EditView得到用户输入的信息并通过点击发送按钮,触发onClick事件,此处分为2部分:
【1】通过HttpClient的httpGet,采用异步任务AsyncTask,并将得到的数据传回MainActivity并进行解析。
【2】数据存在lists中
3、异步任务AsyncTask如何进行:见文章链接点击打开链接
4、在ListAdapter的设置方面:
【1】首先需要通过LayoutInflater.from(mContext)先获得实例inflater,然后通过inflater.inflate()得到需要载入的界面;
【2】判断是机器人还是用户,数据显示在屏幕上。
5、数据的封装
[b]__________[/b]`[b]__________________[/b]
——————————————————————————————
————————————————————————————————————————
————————————————————————————————————————
————————————————————————————————————————
_补充————bug修正————————
出现bug原因:ArrayList 删除问题
正序遍历删除
* 结果:只删除了一半
* 原因:每删除一个,size变小,要删除下一个前需移一位,下次相当于是隔一个再删除
改成:倒序遍历删除(每次都删除最后一个)就可以了。
问题解答:ArrayList删除remove出现的只删除了一半,点击查看
目前还有点bug,会继续修正
存在问题:当对话到达30个或以上只删除了机器人的消息。
bug已经修正
设计步骤:1、main布局和头像+对话框布局
2、得到EditView得到用户输入的信息并通过点击发送按钮,触发onClick事件,此处分为2部分:
【1】通过HttpClient的httpGet,采用异步任务AsyncTask,并将得到的数据传回MainActivity并进行解析。
【2】数据存在lists中
3、异步任务AsyncTask如何进行:见文章链接点击打开链接
4、在ListAdapter的设置方面:
【1】首先需要通过LayoutInflater.from(mContext)先获得实例inflater,然后通过inflater.inflate()得到需要载入的界面;
【2】判断是机器人还是用户,数据显示在屏幕上。
5、数据的封装
***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:paddingTop="@dimen/activity_vertical_margin" tools:context="huaxa.it.tulingdemo.MainActivity" > <ListView android:divider="@null" android:transcriptMode="alwaysScroll" android:listSelector="@android:color/transparent" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/lv" ></ListView> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="@null" android:id="@+id/edt" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bt" android:text="@string/bt" /> </LinearLayout> </LinearLayout>
***left_layout.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" /> <ImageView android:layout_below="@id/time" android:padding="10dp" android:background="@drawable/girl" android:layout_width="70dp" android:layout_height="70dp" android:id="@+id/iv"/> <TextView android:layout_below="@id/time" android:layout_marginRight="50dp" android:background="@drawable/back1" android:layout_toRightOf="@id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:id="@+id/tv" android:textColor="#ff0000" /> </RelativeLayout>
[b]__________[/b]`[b]__________________[/b]
***right_layout.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" /> <ImageView android:layout_below="@id/time" android:layout_alignParentRight="true" android:padding="10dp" android:background="@drawable/man" android:layout_width="70dp" android:layout_height="70dp" android:id="@+id/iv"/> <TextView android:layout_below="@id/time" android:layout_marginLeft="50dp" android:background="@drawable/back2" android:layout_toLeftOf="@id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:id="@+id/tv" android:textColor="#ff0000" /> </RelativeLayout>
***strings.xml*** <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TulingDemo</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="first">小花来惹~这位大侠,很久不见!</string> <string name="bt">发送</string> <string-array name="welcome_tips"> <item>主人,奴婢在此等候多时了</item> <item>主人,近来一切可好</item> <item>亲爱的,我想死你了</item> <item>欢迎归来,我亲爱的主人</item> <item>我是小灵机器人,很高兴为您服务</item> </string-array> </resources>
***MainActivity.java*** package huaxa.it.tulingdemo; 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.app.Activity; import android.os.Bundle; import android.text.style.UpdateAppearance; 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 Activity implements HttpGetDataListener, OnClickListener{ private List<ListData> lists; private Button bt; private EditText edt; private ListView lv; private ListAdapter listAdapter; private String sendtext; private double currentTime=0, oldTime = 0; private String[] welcome_array; private HttpData httpData; private ListData listData; private int flag1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView(){ lists = new ArrayList<ListData>(); bt = (Button) findViewById(R.id.bt); edt= (EditText) findViewById(R.id.edt); lv = (ListView) findViewById(R.id.lv); listAdapter = new ListAdapter(lists,this); bt.setOnClickListener(this); lv.setAdapter(listAdapter); ListData listData; listData = new ListData(getRandomWelcomeTips(), ListData.Recevier, getTime()); lists.add(listData); } private String getRandomWelcomeTips() { String welcome_tip = null; welcome_array = this.getResources() .getStringArray(R.array.welcome_tips); int index = (int) (Math.random() * (welcome_array.length - 1)); welcome_tip = welcome_array[index]; return welcome_tip; } @Override public void getDataUrl(String data) { // System.out.println(data); parseText(data); } //解析文字 public void parseText(String str){ JSONObject jsonObject; try { jsonObject = new JSONObject(str); // System.out.println(jsonObject.getString("code")); // System.out.println(jsonObject.getString("text")); listData = new ListData(jsonObject.getString("text"), ListData.Recevier, getTime()); lists.add(listData); Log.i("receiver", lists.toString()); listAdapter.notifyDataSetChanged(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onClick(View v) { // TODO Auto-generated method stub sendtext = edt.getText().toString(); edt.setText(""); String dropk = sendtext.replace(" ", ""); String droph = dropk.replace("\n", ""); listData = new ListData(sendtext, ListData.Send, getTime()); li fce6 sts.add(listData); // System.out.println(lists.toString()); if (lists.size() > 30) { for (int i =lists.size()-6; i >= 0; i--) { lists.remove(i); } } Log.i("send", lists.toString()); listAdapter.notifyDataSetChanged(); httpData = (HttpData) new HttpData( "http://www.tuling123.com/openapi/api?key=b4521b4718ed4f3fb5bddf6518b8d564&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 >= 60000) { oldTime = currentTime; return str; } else { return ""; } } }
——————————————————————————————
***HttpData.java*** package huaxa.it.tulingdemo; 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 mHttpClient; private HttpGet httpGet; private HttpResponse mHttpResponse; private HttpEntity mHttpEntity; private String url; private InputStream in; private HttpGetDataListener listener; public HttpData(String url,HttpGetDataListener listener) { this.url=url; this.listener = listener; } @Override protected String doInBackground(String... params) { try { mHttpClient = new DefaultHttpClient(); httpGet = new HttpGet(url); mHttpResponse = mHttpClient.execute(httpGet); mHttpEntity = mHttpResponse.getEntity(); //获取一个InputStream输入流对象,我们可以用这个流来操作文件 in = mHttpEntity.getContent(); //通过缓冲区进行读取 BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuffer sb = new StringBuffer(); String str = null; while((str=reader.readLine())!=null){ sb.append(str); } return sb.toString(); } catch (Exception e) { // TODO: handle exception } return null; } @Override protected void onPostExecute(String result) { listener.getDataUrl(result); super.onPostExecute(result); } }
————————————————————————————————————————
***HttpGetDataListener.java*** public interface HttpGetDataListener { void getDataUrl(String data); }
————————————————————————————————————————
***ListAdapter.java*** package huaxa.it.tulingdemo; 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 ListAdapter extends BaseAdapter { private List<ListData> lists; private Context mContext; private RelativeLayout layout; public ListAdapter(List<ListData> lists, Context mContext) { this.lists = lists; this.mContext = mContext; } @Override public int getCount() { // TODO Auto-generated method stub return lists.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return lists.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(mContext); if(lists.get(position).getFlag() == ListData.Recevier){ layout = (RelativeLayout) inflater.inflate(R.layout.left_layout, null); } if(lists.get(position).getFlag() == ListData.Send){ layout = (RelativeLayout) inflater.inflate(R.layout.right_layout, null); } TextView text = (TextView) layout.findViewById(R.id.tv); TextView time = (TextView) layout.findViewById(R.id.time); text.setText(lists.get(position).getContent()); time.setText(lists.get(position).getTime()); return layout; } }
————————————————————————————————————————
***ListData*** package huaxa.it.tulingdemo; public class ListData { private String content; public static final int Send = 1; public static final int Recevier = 2; public int flag; public String time; public ListData(String content, int flag, String time) { setContent(content); setFlag(flag); setTime(time); } public String getTime() { return time; } public void setTime(String time) { // TODO Auto-generated method stub 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) { // TODO Auto-generated method stub this.flag=flag; } }
<uses-permission android:name="android.permission.INTERNET"/>
_补充————bug修正————————
出现bug原因:ArrayList 删除问题
正序遍历删除
* 结果:只删除了一半
* 原因:每删除一个,size变小,要删除下一个前需移一位,下次相当于是隔一个再删除
改成:倒序遍历删除(每次都删除最后一个)就可以了。
if (lists.size() > 30) { for (int i =lists.size()-6; i >= 0; i--) { lists.remove(i); } }
问题解答:ArrayList删除remove出现的只删除了一半,点击查看
相关文章推荐
- 【解答】智能对话机器人demo问题:ArrayList删除remove出现的只删除了一半
- 智能对话机器人学习与制作(2)
- 免费的智能问答机器人api 和机器人对话
- iOS之与智能对话机器人技术实现
- 用 TensorFlow 实现智能机器人的原理及如何实现一个对话机器人
- 实战智能对话航空订票机器人(1)
- Android项目智能机器人的实现,带有源代码,图灵智能机器人,详细讲解。。
- 智能对话机器人学习与制作(1)
- android studio 智能机器人对话app
- 如何用Java实现智能对话机器人
- [置顶] Android项目智能机器人的实现,带有源代码,图灵智能机器人,详细讲解。。
- [置顶] Android项目智能机器人的实现,带有源代码,图灵智能机器人,详细讲解。。
- 先锋机器人学习笔记_1-2 MobileSim MobileEyes用法及demo示例
- 关于智能机器人的一些伦理道德问题
- shell 智能机器人
- 智能机器人——基于Html5和css3的聊天器界面设计与实现
- android智能问答机器人简单实现
- 《华清远见学习手记》 之3G智能机器人——视频监控客户端软件的设计与实现
- python 微信机器人之图灵