1、安卓笔记安卓笔记Handler的使用:先创建一个handler对象,然后调用post方法将要执行的线程对象添加到队列当中,将要执行的操作写在线程对象的run方法中也可以使用handler的sendmessage方法,将一个message添加到消息队列中去:具体是,先创建一个message对象msg,然后设置msg的arg1的参数。然后用sendmessage将msg发送到消息队列,然后重写一个内部类handler,复写其中的handlemessage方法。当接受到msg时,自动调用handlemessage方法。所以可以在这个方法中实现一些内容。说明:用这种方法实际上runnable使用的还是
2、主线程。可以用java中创建线程的方法来创建子线程。Handler对线程的处理不是启动一个新线程,而是调用runnable的run函数。具体的实例:package com.example.handlertest;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.B
3、utton;import android.widget.ProgressBar;public class MainActivity extends Activity private Button btn1 = null; private Button btn2 = null; private ProgressBar pb = null; protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn
4、1 = (Button)findViewById(R.id.btn1); btn2 = (Button)findViewById(R.id.btn2); btn1.setOnClickListener(new listen1(); btn2.setOnClickListener(new listen2(); pb = (ProgressBar)findViewById(R.id.progressBar1); class listen1 implements OnClickListener public void onClick(View v) pb.setVisibility(View.VIS
5、IBLE); System.out.println(visible de zhi :+View.VISIBLE); updateHandler.post(updateThread); class listen2 implements OnClickListener Override public void onClick(View v) pb.setProgress(0); updateHandler.removeCallbacks(updateThread); Handler updateHandler = new Handler() public void handleMessage(Me
6、ssage msg) super.handleMessage(msg); pb.setProgress(msg.arg1); updateHandler.post(updateThread); ; Runnable updateThread = new Runnable() int i =0; public void run() i=i+10; / System.out.println(start Thread); Message msg = updateHandler.obtainMessage(); msg.arg1=i; try Thread.sleep(1000); catch (In
7、terruptedException e) e.printStackTrace(); if(i100) updateHandler.removeCallbacks(updateThread); System.out.println(Thread stop+i); / i=0; if(i=100) updateHandler.sendMessage(msg); ;Bundle的使用Bundle是一个以String类型为键,以各种类型(基本数据类型)为值的一个map。HandlerThread的使用HandlerThread的使用解决了handler队列使用主线程的问题。msg.obj=abc;
8、/用以传递一个对象msg.setData /用以传递一个bundle类型的数据先生成一个handlerThread对象,然后调用start方法,然后使用getlooper方法,生成一个looper,传入到myhandler中去,myhandler为继承自handler 的类,需要复写其中的构造方法和handlermessage方法。具体事例:package com.example.handlertest;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import androi
9、d.os.Looper;import android.os.Message;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;public class MainActivity extends Activity private Button btn1 = null; private Button btn2 = null; privat
10、e ProgressBar pb = null; protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println(mainThread : +Thread.currentThread().getId(); System.out.println(mainThread Name : + Thread.currentThread().getName(); HandlerThr
11、ead handlerThread = new HandlerThread(handlerThread); handlerThread.start(); myHandler handler = new myHandler(handlerThread.getLooper(); Message msg = handler.obtainMessage(); / msg.obj=abc; /用以传递一个对象 Bundle data = new Bundle(); data.putInt(args, 1); data.putString(name, zhandsan); msg.setData(data
12、); /用以传递一个bundle对象 msg.sendToTarget(); btn1 = (Button)findViewById(R.id.btn1); btn2 = (Button)findViewById(R.id.btn2); btn1.setOnClickListener(new listen1(); btn2.setOnClickListener(new listen2(); pb = (ProgressBar)findViewById(R.id.progressBar1); class listen1 implements OnClickListener public void
13、 onClick(View v) class listen2 implements OnClickListener public void onClick(View v) class myHandler extends Handler myHandler() myHandler(Looper looper) super(looper); public void handleMessage(Message msg) super.handleMessage(msg); Bundle b = msg.getData(); int age = b.getInt(args); String name =
14、 b.getString(name); System.out.println(args is :+age + name is :+ name); System.out.println(handler Thread :+Thread.currentThread().getId(); System.out.println(handler Thread Name:+Thread.currentThread().getName(); ; Sqlite:创建:要使用sqlitedatabase,就需要使用sqliteopenhelper类,又由于sqliteopenhelper是一个抽象类,所以需要写一
15、个类来继承自它。/sqliteopenhelper这个类作为一个访问数据库的助手类,提供了两个方面的内容/第一,getReadbleDatabase() ,getWritableDatabase(),可以获得sqlitedatabase对象,通过该对象对数据库进行操作/第二,通过oncreate()和onupdate,允许我们在创建数据库和升级数据库的时候,进行自己的操作MyDatabaseHelper dbHelper = new MyDatabaseHelper(getApplicationContext(), caotang); /只有调用了getWritableDatabase()方法
16、,才能生成一个数据库 SQLiteDatabase db = dbHelper.getWritableDatabase();当要向数据库中存储数据时,要用到contentvalues插入: /想对该对象当中插入键值对,其中键是列名,值是插入到这一列的值,值的类型必须和列所允许的类型对应 ContentValues values = new ContentValues(); values.put(id,1); values.put(name, zhangsan);然后生成一个数据库对象,执行插入命令MyDatabaseHelper dbHelper = new MyDatabaseHelper(
17、getApplicationContext(), caotang); SQLiteDatabase db = dbHelper.getWritableDatabase(); db.insert(user, null, values);更新:基本的插入语法:update student set xxx = xxx where sid = 2;/第一个参数,要更新的表名;第二个参数,一个contentvalues对象;第三个参数,是where子句 db.update(user, values, id=?, new String1);要用到update方法,其中?是个占位符,具体的内容写在Strin
18、g数组里面。MyDatabaseHelper dbHelper = new MyDatabaseHelper(getApplicationContext(), caotang); /只有调用了getWritableDatabase()方法,才能生成一个数据库 SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(name, lisi); /第一个参数,要更新的表名;第二个参数,一个contentvalues对象;第三个参数,是where
19、子句 db.update(user, values, id=?, new String1);查询:用到了database的query方法,该方法参数众多,public Cursor query (String table, String columns, String selection, String selectionArgs, String groupBy, String having, String orderBy)Table表示的是表名;columnsMyDatabaseHelper dbHelper = new MyDatabaseHelper(getApplicationCont
20、ext(), caotang); /只有调用了getWritableDatabase()方法,才能生成一个数据库 SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query(user, new Stringid,name, id=?, new String 5, null, null, null); while (cursor.moveToNext() String name = cursor.getString(cursor.getColumnIndex(name); System.out.prin
21、tln(name); XX地图:private BMapManager mBMapManager; / 加载地图的引擎在setContentView(R.layout.myoverlay_activity);之前要初始化BmapManagermBMapManager = new BMapManager(getApplicationContext(); mBMapManager.init(KEY, new MKGeneralListener() Override public void onGetPermissionState(int arg0) if (arg0 = 300) System.o
22、ut.println(输入的key不正确); Override public void onGetNetworkState(int arg0) / TODO Auto-generated method stub 然后就可以实例化mapview,最后可以得到一个MapController通过:mapController = mapView.getController();/ 定义一个经纬度,表示一个地理坐标点,存放经度和纬度,以微度的整数形式存储 GeoPoint geoPoint = new GeoPoint(int) (39.963175 * 1E6), (int) (116.400244
23、* 1E6);mapController.setCenter(geoPoint); mapController.setZoom(12); /显示交通图/ mapView.setTraffic(true); /显示卫星图/ mapView.setSatellite(true);地图覆盖物: Overlay:Overlay是一个基类,它表示可以显示在地图上方的覆盖物。 从2.0.0开始,SDK不支持直接继承Overlay , 用户可通过继承ItemizedOverlay来添加覆盖物。 ItemizedOverlay自定义覆盖物或标注管理类通过ItemizedOverlay可以向地图添加一个或多个自
24、定义覆盖物或标注。 添加覆盖物的一般流程:1. 用OverlayItem 准备overlay数据。2. 创建ItemizedOverlay实例,调用 addItem(OverlayItem) 接口添加overlay. 3. 若一次性添加的overlay数据较多,可以使用 addItem(List) 接口. 3. 调用MapView.getOverlays().add()方法添加overlay到mapview中。4. 调用MapView.refresh() 使Overlay生效。OverlayItem表示单个overlay数据,如自定义标注,建筑等。OverlayItem是ItemizedOve
25、rlay的基本组件, OverlayItem存储的overlay数据通过ItemizedOverlay添加到地图中。给地图添加自定义view:viewCache = getLayoutInflater().inflate(R.layout.custom_text_view, null); 得到一个viewpopupInfo = (View) viewCache.findViewById(R.id.popinfo); popupLeft = (View) viewCache.findViewById(R.id.popleft); popupRight = (View) viewCache.fin
26、dViewById(R.id.popright); popupText =(TextView) viewCache.findViewById(R.id.textcache);button = new Button(this); /创建一个button对象,需要一个context,所以将this传进去 button.setBackgroundResource(R.drawable.popup);然后在继承的ItemizedOverlay中的ontap添加事件,如果要显示pop的话,要使用pop.showpopup(bitmap,geopoint,在y轴的偏移量),所以要建一个bitmap数组,里
27、面存储着三张图片。建一个类,将一个view编程一个bitmap,其实就是显示view的缩略图。最后写一个popup监听器,根据得到的index,来进行相应的处理,最后都得mMapView.refresh();下,来更新界面。安卓界面:可以新建一个xml,这个是设置空间的背景,其中可以设置颜色和圆角弧度(放在drawable下) 然后可以新建一个xml设置点击事件,如击中后更改颜色(放在drawable下)selector xmlns:android= 还可以新建一个xml,用于保存一些颜色信息(放在values文件夹下) #ff494949 #ffffffff #ff333333 #00000000 #ffdddddd color name=color_bla
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1