1.小技巧:idNumber+""-->可以将idNumber这个int值转换为string类型变量。
2.重写toString()方法:
@Override
public String toString() {
return "NewsList{" +
"news_id=" + news_id +
", title='" + title + '\'' +
", intro='" + intro + '\'' +
", cover='" + cover + '\'' +
", source='" + source + '\'' +
", datetime='" + datetime + '\'' +
", view_num=" + view_num +
", agree_num=" + agree_num +
", comment_num=" + comment_num +
'}';
3.handler
主线程: handler handler=new Handler(){
public void hanleMessage(Message msg){
//取出消息中的数据
Bitmap bitmap=(Bitmap)msg.obj;
iv.setImageBitmap(bitmap);
}
};
工作线程: //创建一个消息 Message msg=new Message(); msg.obj=bitmap;
bitmap就是需要传递给主线程的对象。通过msg来封装,handler来传递。
*发送msg的方式之一:
handler.post(new Runnable() {
//run里面是一种主线程需要执行的一段代码.
public void run() {
dialog.dismiss();
Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
}
});
总结:handler-消息的发送者和处理者,handler在创建是必须关联到一个线程.在一个线程中创建一个消息队列,就会有一个looper,将handler和looper关联。默认关联创建它时,所在的线程.
post和sendMessage的区别:
当调用别人写的new handler()方法时,如果想重写消息处理方法时,要用到post()方法。因为别人已经将handlermessage()
写好了,你无法更改,只能重写runnable()方法.
4.AsyncTask-异步任务-线程间通信很好用.
*作用—封装了消息线程通信,创建了handler,message,自动发送Message.
*2个方法:doInbackground--创建工作线程
onPostExcutor-工作线程完成后,由主线程执行的一段代码.
*异步任务的三个参数:
class DownLoad extends AsyncTask<Void //后台任务参数类型-比如string, Void.执行后台任务时,发布信息的数据类型.会包装
成msg发给主线程,, Result> // 运算结果的数据类型
* doInBackground:(创建+封装+发送:消息)
异步任务启动后,会新建线程,在线程内执行此方法,结果会返回一个运算结果,结果会被包装成msg,发到主线程.
* onPostExecute:(处理消息)
AsyncTask内创建的handler对象处理消息时,会从msg取出后台结果,并调用onpost方法。
5.Socket
1>java.net.ServerSocket
*在服务器端,选择一个端口,在这个端口等待客户端发起连接(被动等待).
步骤:
*1-socket通道:当用户发起连接,才创建通道.
ServerSocket ss = new ServerSocket(8000);
备注:相当于在server打开一张门
ss.accept();
备注:监听这张门的动向,等待,当客户端发起连接,就创建一个socket通道。
2>java.net.Socket
*在客户端,选择一个服务器和他的端口,向其发送连接。
步骤:
1. Socket s = new Socket("localhost",8000);
2.创建输入流和输出流
3.向服务器输出数据-while(true)
服务器端:
*ss.accept: 端口等待连接,阻塞代码
*in.readLine();阻塞代码
*一个accept只能保证和一个客户端连接,加上上面2个方法都是阻塞方法,为了能够保证多个客户端能同时连接一个Server,需要创建线程来实现.
实现方式: while(true){
Socket n = ss.accept();
WorkThread t=new WorkThread(n);
t.start();
}
* accept()--等待客户端发起连接,此时并未创建socket通道,
当用户发起连接时,会立即创建socket,返回的socket类型对象,表示建立成功的通道.
6.插入和冒泡
*插入排序: 从第2个数开始,取出每一个数跟它前面的所有数比较大小,如果小就交换位置,循环到最后。需要用到2层循环来实现这个过程 。
*冒泡排序: 2层循环:外层i从0开始,内层j从最后一个数开始,从后面向前面走,相邻之间的2个数比较,如果后一数比前面数小,交换位置。外层循环一次结束后,最小的数会排在第1位,第2次循环结束后,第2小的数会排在第2位。