<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<ChatMessage> mDatas;
public ChatMessageAdapter(Context context, List<ChatMessage> 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<ChatMessage> 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<ChatMessage>();
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.感谢开源的世界 感谢鸿洋大神