android机器人音箱操作使用说明,了了机器人开发日志

本文介绍了一款基于Android平台的聊天应用程序开发过程,包括使用图灵API实现机器人对话、ListView自定义适配器处理不同类型的聊天消息及界面布局,并讨论了如何通过子线程发送和接收消息,以及使用Gson解析数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<3.23>

1.第三方的API的使用,机器人使用的是图灵提供的KEY

2.ListView的多种item的布局

2.1 定义一个URL,提供使用的Gson包

2.2 doget方法返回结果

2.3 URL以及编码的转换 如下

public class HttpUtils {

/**

*

* @author zhaogy

* @project 定义一个 string url 定义个doget 方法

*

*

* */

private static final String URl = "http://www.tuling123.com/openapi/api";

// private static final String API_KEY ="8381bb52462ef312ebe4cb54b7ec8a6e";

public static ChatMessage sendChatMessage(String msg) {

ChatMessage chatMessage = new ChatMessage();

String jsonRes = doGet(msg); // 用户得到返回结果 ,GSON

Gson gson = new Gson();

Result result = null; // 有真有假 try catch

try {

result = gson.fromJson(jsonRes, Result.class); // 把返回的字符串跟信息放到result中

chatMessage.setMsg(result.getText()); // 注意IDE引入包的格式

} catch (Exception e) {

// TODO: handle exception

chatMessage.setMsg("服务器繁忙");

}

chatMessage.setDate(new Date()); // 设置信息跟提示

chatMessage.setType(Type.INCOMING);

return chatMessage;

}

<3.24>

1.编写一个工具类实现消息的发送跟接收

2.搭建环境测试类

3.bean的编写 返回chatmessage ,使用 doget 使用 Gson.jar

public class ChatMessageAdapter extends BaseAdapter {

private LayoutInflater mInflater; // 给数据传到ADPTER

private List mDatas;

public ChatMessageAdapter(Context context, List mDatas) {

mInflater = LayoutInflater.from(context);

this.mDatas = mDatas;

}

@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;

}

@Override

public int getItemViewType(int position) { // 获取到的条目数据进行分配

ChatMessage chatMessage = mDatas.get(position);

if (chatMessage.getType() == com.example.bean.ChatMessage.Type.INCOMING) {

return 0;

} else {

return 1;

}

}

@Override

public int getViewTypeCount() {

return 2;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) { // 通过convview

// holder

// 来实现语句对界面的实现

ChatMessage chatMessage = mDatas.get(position);

ViewHolder viewHolder = null;

if (convertView == null) {

if (getItemViewType(position) == 0) {

convertView = mInflater.inflate(R.layout.item_from_msg, parent,

false);

viewHolder = new ViewHolder();

viewHolder.mDate = (TextView) convertView

.findViewById(R.id.id_form_msg_date);

viewHolder.mMsgs = (TextView) convertView

.findViewById(R.id.id_from_msgs_msg_info);

} else {

convertView = mInflater.inflate(R.layout.item_to_msg, parent,

false);

viewHolder = new ViewHolder();

viewHolder.mDate = (TextView) convertView

.findViewById(R.id.id_to_msg_date);

viewHolder.mMsgs = (TextView) convertView

.findViewById(R.id.id_to_msg_msg_info);

}

convertView.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) convertView.getTag();

}

// 设置数据

SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 用来设置时间格式

viewHolder.mDate.setText(sFormat.format(chatMessage.getDate())); // 日期

viewHolder.mMsgs.setText(chatMessage.getMsg()); // 获取信息

return convertView;

}

private final class ViewHolder {

TextView mDate;

TextView mMsgs;

}

}

<3.25>

1.布局的编写

2.Adapter的使用 1.list 2.Adpter 3.数据源

3.通过itemtype的不同来设置布局

4.考虑 子线程跟异步加载 刷新UI

public class MainActivity extends Activity {

private ListView mMsgs;

private ChatMessageAdapter mAdapter;

private List mDatas;

private EditText mInputMsgs;

private Button mSendmsgs;

private Handler mHandler = new Handler()

{

public void handleMessage(android.os.Message msg)

{

// 等待接收,子线程完成数据的返回

ChatMessage fromMessge = (ChatMessage) msg.obj;

mDatas.add(fromMessge);

mAdapter.notifyDataSetChanged();

mMsgs.setSelection(mDatas.size()-1);

};

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

intview();

intData();

intlistener();

}

private void intlistener() {

mSendmsgs.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

final String toMsgs = mInputMsgs.getText().toString();

if (TextUtils.isEmpty(toMsgs)) {

Toast.makeText(MainActivity.this, "发送信息不能为空",

Toast.LENGTH_SHORT).show();

return;

}

ChatMessage toMessage = new ChatMessage();

toMessage.setDate(new Date());

toMessage.setMsg(toMsgs);

toMessage.setType(Type.OUTCOMING);

mDatas.add(toMessage);

mAdapter.notifyDataSetChanged(); // 通知更新

mInputMsgs.setText("");

// 网络操作不能在主线程 使用子线程进行信息的发送跟接收

// 子线程不能更新主线的任务 所以使用 异步任务或handler

new Thread() {

public void run() {

ChatMessage fromMessage = HttpUtils

.sendChatMessage(toMsgs);

Message m = Message.obtain();

m.obj = fromMessage;

mHandler.sendMessage(m);

};

// ChatMessage fromMessage =

// HttpUtils.sendChatMessage(toMsgs);

}.start();

// ChatMessage fromMessage = HttpUtils.sendChatMessage(toMsgs);

}

});

}

private void intData() {

mDatas = new ArrayList();

mDatas.add(new ChatMessage("您好,我是中国信息导航网的小二了了,我们的网址是(http://www.37698.cn)为您服务", Type.INCOMING, new Date()));

// mDatas.add(new ChatMessage("你好", Type.OUTCOMING, new Date()));

mAdapter = new ChatMessageAdapter(this, mDatas);

mMsgs.setAdapter(mAdapter);

}

private void intview() { // 初始化

// TODO Auto-generated method stub

mMsgs = (ListView) findViewById(R.id.id_listview_msgs);

mInputMsgs = (EditText) findViewById(R.id.id_input_msg);

mSendmsgs = (Button) findViewById(R.id.id_send_msg);

}

}

<3.26>

1.上传到安卓市场 作为离职时的礼物

2.感谢开源的世界 感谢鸿洋大神

Android HttpURLConnection Socket Http (网络编程)

欢迎转载,但请保留文章原始出处:CSDN:http://www.csdn.net雨季o莫忧离:http://blog.csdn.net/luckkof正文在Android的网络通讯中,通常会使用Socket进行设备间数的

杀掉指定进程

杀死想要杀掉的进程:在AndroidManifest.xml中配置activity属性android:process=:lthj.xct.process。在代码中使用:ActivityManagermActivityManager=(ActivityManager)getSystemService(Co

[置顶]

android自定义View之自定义可置顶ScrollView,View滑动原理简析

使用各种App的时候,发现一个特点,现在的App在可以滑动的页面中,基本上都添加了一个置顶按钮的效果,使的用户可以很方便的回到顶部,就像网页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值