您的位置:首页 > 移动开发 > Android开发

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: