Android 图灵机器应用
2015-12-28 21:07
501 查看
*
* 转载请标明出处:http://blog.csdn.net/u013598111/article/details/50421364
* @author:【JunTao_sun】
*
*
*/
先上http://www.tuling123.com/ 官网注册 下载API文档和SDK 导入相应的jar包 拿到自己的APPkey 就可以进行开发了。
主要是下面 那个布局 left和right分别对应 我发的消息和机器人发的消息
package com.example.xiaohui; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.example.xiaohui.adapter.ListAdapter; import com.example.xiaohui.entity.MessageForMe; import com.example.xiaohui.utils.GetStringForXIAOHUIUtils; import com.google.gson.Gson; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.text.TextUtils; import android.text.format.DateUtils; import android.util.Log; import android.view.Menu; 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 { public static final int XIAOHUI = 1; public static final int ME = 0; private String TAG; private EditText mEditText; private ArrayList<MessageForMe> data; private SimpleDateFormat sdf; private ListAdapter mAdpter; private ListView list_v; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getActionBar().setTitle("冬日里 4000 的太阳"); initData(); initView(); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isSendMessage) { isSendMessage = false; String info = mEditText.getText().toString().trim(); if (!TextUtils.isEmpty(info)) { MessageForMe mf = new MessageForMe(); Date date = new Date(); String time = sdf.format(date); mf.setDate(time); mf.setText(info); mf.setType(ME); handler.sendMessage(handler.obtainMessage(0x11, mf)); startThread(info); } } } }); } private void initData() { // 存放消息对象 data = new ArrayList<MessageForMe>(); sdf = new SimpleDateFormat("HH时mm分ss秒 "); // 初始化一个消息对象 MessageForMe mf = new MessageForMe(); Date date = new Date(); String time = sdf.format(date); mf.setDate(time); mf.setText("你好,我是小慧。"); mf.setType(1); data.add(mf); } private void initView() { mEditText = (EditText) this.findViewById(R.id.edit); btn = (Button) this.findViewById(R.id.send); mAdpter = new ListAdapter(data, this); list_v = (ListView) this.findViewById(R.id.chatwindow); list_v.setAdapter(mAdpter); } private void startThread(final String info) { new Thread(new Runnable() { private String Tag; @Override public void run() { Gson gson = new Gson(); MessageForMe mf = gson.fromJson( GetStringForXIAOHUIUtils.getResult(info), MessageForMe.class); if (mf.getText() == null) return; Date date = new Date(); String time = sdf.format(date); // 设置消息类型 mf.setType(1); // 设置当前时间 mf.setDate(time); // 加入集合 data.add(mf); // 提醒更新 Message ms = handler.obtainMessage(0x00, info); handler.sendMessage(ms); } }).start(); } // 控制等待接收完消息才能 执行下一次请求 private boolean isSendMessage = true; private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0x00: updateAdapter(); isSendMessage = true; break; case 0x11: data.add((MessageForMe) msg.obj); updateAdapter(); break; } } /** * 更新适配器 */ private void updateAdapter() { mAdpter.notifyDataSetChanged(); }; }; }
package com.example.xiaohui.adapter; import java.util.ArrayList; import java.util.List; import com.example.xiaohui.MainActivity; import com.example.xiaohui.entity.MessageForMe; import com.example.xiaohui.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class ListAdapter extends BaseAdapter { ArrayList<MessageForMe> mData; LayoutInflater inflater; Context mContext; public ListAdapter(ArrayList<MessageForMe> data, Context context) { mData = data; inflater = LayoutInflater.from(context); mContext = context; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } /* * 重写View类型 和getViewTypeCount()方法 * @see android.widget.BaseAdapter#getItemViewType(int) */ @Override public int getItemViewType(int position) { if (mData.get(position).getType() == MainActivity.XIAOHUI) { return 1; } return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { HoldView holdview = null; if (convertView == null) { holdview = new HoldView(); if (getItemViewType(position) == 1) { convertView = inflater.inflate(R.layout.left, null); holdview.Text = (TextView) convertView .findViewById(R.id.text_left); holdview.Time = (TextView) convertView .findViewById(R.id.time_left); } if (getItemViewType(position) == 0) { convertView = inflater.inflate(R.layout.right, null); holdview.Text = (TextView) convertView .findViewById(R.id.text_right); holdview.Time = (TextView) convertView .findViewById(R.id.time_right); } convertView.setTag(holdview); } else { holdview = (HoldView) convertView.getTag(); } holdview.Text.setText(mData.get(position).getText()); holdview.Time.setText(mData.get(position).getDate()); return convertView; } public class HoldView { TextView Text; TextView Time; } }
package com.example.xiaohui.entity; public class MessageForMe { private String text; private int type; private String date; private String code; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getText() { return text; } public void setText(String text) { this.text = text; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } }
package com.example.xiaohui.utils; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.lang.reflect.Method; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import org.apache.http.client.utils.URLEncodedUtils; import constans.Constans; public class GetStringForXIAOHUIUtils { // http:// www.tuling123.com /openapi/api?key=***********&info=你好 /** * * 请求网络 拼装URL * * @param info * @return */ public static String getResult(String info) { try { String infoEncode = URLEncoder.encode(info, "UTF-8"); URL url = new URL(Constans.URL + "?key=" + Constans.APPKEY + "&info=" + infoEncode); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setDoInput(true); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); if (connection.getResponseCode() == 200) { InputStream in = connection.getInputStream(); String result = getInfo(in); return result; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * * 读取输入流信息 * * @param in * @return */ private static String getInfo(InputStream in) { // InputStreamReader input=new InputStreamReader(in); StringBuilder stringbuilder = new StringBuilder(); byte[] buffs = new byte[1024]; BufferedInputStream inputBuff = new BufferedInputStream(in); int len = 0; try { while ((len = inputBuff.read(buffs)) != -1) { stringbuilder.append(new String(buffs, 0, len)); } inputBuff.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (inputBuff != null) try { inputBuff.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return stringbuilder.toString(); } }
</pre><pre name="code" class="java">package constans; public class Constans { public static final String URL="http://www.tuling123.com/openapi/api"; public static final String APPKEY="19b1b4282eb68d5fce84******"; }下边是布局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:layout_margin="8dp"
android:background="@drawable/skin"
android:orientation="vertical" >
<ListView
android:id="@+id/chatwindow"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@null"
android:transcriptMode="alwaysScroll"
android:overScrollMode="never"
android:scrollbars="@null" >
</ListView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/chatwindow"
android:background="@drawable/bottom_bar"
android:orientation="horizontal"
android:padding="8dp" >
<EditText
android:id="@+id/edit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/login_edit_normal"
android:singleLine="true" />
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:background="@drawable/button_select"
android:text="发送" />
</LinearLayout>
</LinearLayout>
left:
<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="wrap_content"
tools:context=".MainActivity" >
<TextView
android:id="@+id/time_left"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="2015-12-25" />
<LinearLayout
android:id="@+id/lefttop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/time_left"
android:orientation="horizontal" >
<RelativeLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/xiaohui"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/ic_xiaohui" />
<TextView
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_below="@+id/xiaohui"
android:layout_marginTop="4dp"
android:gravity="center"
android:text="小慧" />
</RelativeLayout>
<TextView
android:id="@+id/text_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/chatfrom_bg_normal" />
</LinearLayout>
</RelativeLayout>
right:
<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="wrap_content"
>
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:id="@+id/time_right"
/>
<LinearLayout
android:layout_below="@+id/time"
android:id="@+id/top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true" >
<TextView
android:id="@+id/text_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_toLeftOf="@+id/xiaohui"
android:background="@drawable/chatto_bg_normal"
/>
<ImageView
android:id="@+id/xiaohui"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_me" />
</LinearLayout>
<TextView
android:layout_below="@+id/top"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginTop="4dp"
android:text="Juntao"/>
</RelativeLayout>
相关文章推荐
- android获取是否有某种权限
- Android在mtk平台上获取手机内置存储卡路径
- Android中怎样在应用A中启动或安装应用B
- 百度Android定位SDK实现获取当前经纬度及位置
- Android Studio -修改LogCat的颜色
- android failed to start daemon 问题
- Android ListView监听上下滑动(判断是否显示返回顶部按钮)
- Android 短信验证的再次实现
- Android实战之 自定义GitHub开源项目ViewPagerIndicator
- Android - 警告Nested weights are bad for performance
- Android 启动过程的底层实现
- android studio新手使用攻略
- android-Recreating an Activity
- Android ADB命令大全
- Android才是游戏开发者的乐土
- Android ListView
- 注解在android中的使用
- 《Android群英传》读书笔记(12)第十二章:Android 5.X新特性详解
- 史上最易懂的Android jni开发资料--NDK环境搭建
- Android之NDK开发