R.id.stringidR.string.valuestrR.layout.sssdR.java 是资源文件的映射类R类为每份资源定义一个内部类android:id="@+id/ok" 在R类中id内部类中新增一个ok的属性 R.id.ok变量(Button)findViewById(R.id.ok)可以获取对应的控件android:label = "@string/test"android清单文件  AndroidManifest.xml 整个应用的全局描述文件 每个项目中必须存在的文件定义权限 uses-permission android应用由一个或多个基本组件所组成(activity-用户交互组件和view-显示UI组件 用户实实在在看到的组件 需要放入activity)view要显示则应该调用activity中的setContentView(R.layout.<资源文件名称>)方法 参数是需要显示的View对象也可以通过findViewById(R.id.<UI对应的ID>)大部分的视图组件放入到 android.widget 和 android.view中Button btn = new Button(this); 通过new可以创建所有的View组件 参数都是thisbtn.setOnClickListener(new OnClickListener(){        @Override        public void onClick(View v){                }})--线形布局<LinearLayout android:id="@+id/ok" android:orientation:"vertical" android:layout_width="fill_parent"               android:height="fill_parent"> wrap_content 和fill_parentandroid:gravity设置所有组件对其方式RelativeLayout相对布局android:background="@drawable/bk"GridLayout--控件分类TextView EditText 属性几乎可以共用 android:textSize="10pt"android:inputType="number"设置输入的类型是数字的Button RadioGroup RadioButton CheckBoxRadioGroup点击条目时响应的方法 setOnCheckedChangeListenerListView ListActivity --继承列表activity继承ListActivity类ListView GridView Spinner 都是容器而 adapter是加载项  和内容和显示的样式有关Adapter常见实现类有 ArrayAdapter SimpleAdapter SimpleCursorAdapter BaseAdapterandroid:orientation="vertical"list.setOnItemClickListener(new OnItemClickListener(){     @Override       public void onItemClick(){              }});android:layout_height="240dp" 可以设置具体的大小android:layout_width="240dp""@string/status"ListActivity是Activity当中需要继承的  ListView是XML中的List关联标签事件 分为 注册事件和回调事件 setXxxListener就是注册事件 事件源(Button) 事件 事件监听器KeyEvent.KEYCODE_A 表示键盘中的A键setLongClickListener长时间点击事件因为事件的监听一般只写一次 因此一般使用匿名内部类通常建议使用匿名内部类作为监听器btn.setOnClickListener(new OnClickListener(){         @Override         public void onClick(View v){         }});同样也可以直接绑定到标签中<Button android:onClick="doOnClick" /> 在Activity类中定义doOnClick方法 public void doOnClick(View source)Activity主要作用是完成界面初始化的工作Handler消息传递机制只允许UI线程处理UI组件继承Handler类  覆盖的方法有handleMessage与Handler相关的类有 Message Looper MessageQueue ;Handler handler = new Handler(){        @Override        public void handleMessage(Message msg){               Bundle bundle = msg.getData();               bundle.getString("paramString");               bundle.getInt("paramInt");               bundle.putString("paramName","paramValue");        }};Bundle bundle = new Bundle();bundle.putString("paramName","paramValue");bundle.putInt();SELECT * FROM TEXMPAPER ;Toast.makeText(this,content,short).show();progressBar.setProgress(i);ListActivity ListViewTabActivity TabHostActivity必须在AndroidManifest.xml中注册多个Activity组成Activity栈当前活动的Activity位于栈顶继承Activity类 并重写onCreate方法 在被创建时调用在Activity中启动另一个Activity方法 startActivity(Intent)Intent intent = new Intent(OneActivity.this,TwoActivity.class);startActivity(Intent) --从OneActivity跳转到TwoActivity调用finish方法结束某个Activity使用Bundle用于不同Activity之间数据传递Intent提供的方法putExtras(Bundle);Bundle getExtras();--在Activity中获取意图Intent intent = getIntent();Bundle bundle = intent.getExtras();Activity四种加载模式 standard(每次都会创建新的Activity实例) singletop(如果栈顶有该Activity实例则不创建新Activity实例) singletask(同一个Task只有一个Activity实例) singleinstance(永远只会创建一个Activity实例)AndroidManifest.xml中的<intent-filter/>定义了第一次调用的Activity --所有activity必须要在清单文件中声明 否则不起作用<activity android:name=".OneActivity">资源文件分两类 可以用R资源清单类访问的 一般在res目录下 和 不能用R清单类进行访问的资源 一般在assets目录下可以通过Resource类进行获取对应的资源文件的实际值Resource res = getResources();--获取字符串资源String str = res.getText(R.string.strId);--获取图片资源Drawable draw = res.getDrawable(R.drawable.logoId);--获取数组类型资源int[] intArr = res.getIntArray(R.array.arrayId);在XML中使用资源信息@resource_type/resource_name 如 @id/stringId  <resources><color name='red'>#dddd</color>  @color/red  <string name='key'>value</color> @string/key</resources><array name="array_a">  <item>@string/key</item> --可以引用其他资源信息  <item>item2</item></array>getResources().getStringArray(R.array.array_a); --获得字符串数组<ListView android:entries="@array/array_a">BitMap相当于一张位图绘图关键类 Canvas PaintSharedPreferences主要保存简单的Key-Value键值对SharedPreferences是一个借口 只能通过Context调用的getSharedPreferences(name,mode)来获得SharedPreferences实例读SharedPreferences数据用sharedPreferences.getString("xxx",null) 或者 getInt()写数据 则用 Editor editor = sharedPreferences.edit();editor.putString("xxx","valueString");editor.putInt("xxx","valueInt");--弹出一个小的提示框Toast.makeText(this,"显示内容",Toast.LENGTH_LONG).show();Android中的应用程序的包名来作为该应用程序的标示--获得其他应用程序的SharedPreferencesContext context = createPackageContext("应用程序对应的包名",Context.CONTEXT_IGNORE_SECURITY);context.getSharedPreferences("count",CONTEXT.MODE_WORLD_READABLE);--File存储FileInputStream openFileInput(String name) ;FileOutputStream openFileOutput(String name) ;SD卡的地址File file = Environment.getExternalStorageDirectory() ;如果要在SD卡读写数据必须要在清单文件(AndroidManifest.xml)文件定义权限--SD卡中创建和删除文件的权限<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">--SD卡中写入数据的权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">注册Provider<provider android:name=".DDDProvider" android:authorities="uri.dd" android:exported="true"> uri.dd是Uri域名android:exported用于指定是否可以被其他应用程序调用uri --> content://uri.dd/word/2     访问uri.dd下的 word的数据为2的数据ContentResolver会通过uri找到对应的ContentProvider来进行CRUD操作A调用ContentResolver对应的insert方法时对调用uri对应的ContentProvider来进行insert操作编写自己的XxxContentProvider需要继承ContentProvider类 重写 insert query update delete等方法  然后配置ContentProvider Uri uri = Uri.parse("content://uri.dd/");ContentResolver resolver = getContentResolver();resolver.query(uri,param..);ContentResolver所有的方法的第一个参数是uriContentObserver用于监听ContentProvider的数据变化定义Service的子类 然后在清单文件中定义该Service Service只运行于后台<service android:name=".XxxService">         <intent-filter>             <action android:name="xxxx.xxx.service">         </intent-filter></service>启动Servicefinal Intent intent = new Intent();intent.setAction("xxxx.xxx.service");startService(intent);停止ServicestopService(intent);AIDL Service 跨进程之间的通信AIDL定义的源代码必须要以.aidl结尾cat.aidlpackage dddinterface ICat{          String getColor();          double getWidth();}ADT工具会自动生成ICat.java文件 ICat实现了IBinder和ICat两个接口TelephonyManager电话管理器TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);SmsManager短信管理器SmsManager smsManager = SmsManager.getDefault();smsManager.sendTextMessage(对面号码,null,内容,PendingIntent.getActivity(this,0,new Intent(),0),null);PendingIntent是可以发送到其他应用组件的Intent授予发送短信的权限 <uses-permission android:name="android.permission.SEND_SMS" />AudioManager音频管理器--播放外部音乐MediaPlayer mediaPlayer = new MediaPlayer();Uri uri = Uri.parse("http://xxxx/xx/xx.mp3");mediaPlayer.setDataSource(this,uri);-- 准备播放音乐mediaPlayer.prepare();-- 播放音乐mediaPlayer.start();VideoView播放视频 是一个标签 相当于 ImageViewSELECT * FROM THRSDEPTREQUEST FOR UPDATE ;ServerSocket建立服务器WebView浏览网页Android内置了HttpClient可以很好的进行http请求和http响应ServerSocket--服务端try {ServerSocket ss = new ServerSocket(3000);      --监听3000端口是否有连接进来 如果有则写入你好!!while(true){Socket socket = ss.accept() ;OutputStream out = socket.getOutputStream();out.write("你好!!".getBytes());out.close() ;socket.close();}} catch (IOException e) {e.printStackTrace();}--客户端try {Socket s = new Socket("127.0.0.1", 3000);BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));System.out.println(br.readLine());} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}添加访问互联网的权限<uses-permission android:name="android.permission.INTERNET">--加载网页信息<WebView android:id="@+id/test" android:width="fill_parent" android:height="wrap_content">WebView test = (WebView) findViewById(R.id.test);test.loadUrl(url);ImageView 来加载静态图片 也使用AnimationDrawable来开发逐逐帧动画ImageView image ;BitmapDrawable drawable = (BitmapDrawable)image.getDrawable();--为ImageView设置图片资源image.setImageBitmap(BitmapFactory.decodeStream(inputStream));Bitmap bitmap = drawable.getBitmap();--BitmapDrawable就是封装了Bitmap的drawableBitmapDrawable drawable = new BitMapDrawable(bitmap);Bitmap.createBitMap(BitMap source, int x,int y ,int width,int height);--BitmapFactory是Bitmap一个工具类 可以从不同的数据源解析创建Bitmap对象Bitmap bitmap = BitmapFactory.decodeResource(Resources res,int drawableId) ;从xml中解析图片资源Bitmap bitmap = BitmapFactory.decodeFile(String pathName); 从文件路径获取Bitmapassets目录管理器AssetManager assetManager = getAssets();String imageArr[] = assetManager.list();InputStream inputStream = assetManager.open(imageArr[0]);--为ImageView设置图片ImageView.setImageBitmap(BitmapFactory.decodeStream(inputStream));可以获得一张位图的某一块图片绘图基础 Canvas Paint Path  Canvas是依附于View的画布绘图应该继承View类 并重写onDraw(Canvas canvas)Canvas对应的各种方法drawXxx() 可以绘制各种图形 比如直线 点 圆  还提供了 旋转(rotate) 移动(translate) 缩放(scale) 倾斜(skew)Paint代表的是在Canvas上的一个画笔 可以表示 填充颜色 风格 Paint.setColor()Paint.setStyle()一个自定义View组件 需要重写View类的onDraw(Canvas canvas) 方法 把需要绘制的内容放在 onDraw方法中TextView extends View{         public TextView(Context context){                // do something          }         @Override         public void onDraw(Canvas canvas){                Paint paint = new Paint();                canvas.drawTextOnPath();                --画一张图片                canvas.drawBitmap(bitMap,0,0,paint);                canvas.drawPath(path,paint);         }}--显示TextViewsetContentView(new TextView(this));动画其实就是不断重复调用View组件上的onDraw(Canvas canvas)方法如果每次在View组件上绘制的图形不同 就成了动画的效果每次View组件上的图形状态数据发生变化 都应该通知View组件重写调用onDraw(Canvas canvas)重写绘制图片通知View重绘 可调用invalidate(在UI线程中)或postInvalidate(非UI线程中)--创建菜单 boolean onCreateOptionsMenu(Menu menu){  MenuInflator inflator = new MenuInflator(this);  //把定义好的菜单赋给menu  inflator.inflate(R.menu.myMenu,menu);  return onCreateOptionsMenu(menu);}--菜单选中 点中菜单时的响应boolean onOptionsItemSelected(MenuItem item)WindowManager windowManager = getWindowManager();Display dis = windowManager.getDefaultDisplay();DisplayMetrics metrics = new DisplayMetrics();dis.getMetrics(metrics);--获取屏幕宽度int windowWidth = metrics.widthPixels;--获取屏幕高度int windowHeight = metrics.heightPixels;final GameView gameView = new GameView(this);setContentView(gameView);Handler handler = new Handler(){@Override  public void handleMessage(Message message){  if(message.what == 0x123){    --通知重写绘图    gameView.invalidate();    }  }};final Timer timer = new Timer();timer.schedule(new TimerTask(){@Override  public void run(){  ballX += xSpeed ;    ballY += ySpeed ;    handler.sendEmptyMessage(0x123);  }},0,300);--图形组件类public class GameView extends View{       Paint paint = Paint();       public GameView(Context context){       super(context);        --使当前视图获得焦点        setFocusable(true);       }       @Override       public void onDraw(Canvas canvas){       paint.setStyle(Paint.Style.FILL);        --设置去锯齿        paint.setAntiAlias(true);        if(isLose){        paint.setColor(Color.RED);          paint.setTextSize(20);          --生成一个已结束的Text          canvas.drawText("游戏已结束",50,200,paint);        }else{          --绘制小球          paint.setColor(Color.rgb(240,240,80));          canvas.drawCircle(ballX,ballY,12,paint);          --绘制球拍          paint.setColor(Color.rgb(80,80,200));          canvas.drawRect(racketX,racketY,racketX+RACKET_WIDTH,racketY+RACKET_HEIGHT,paint);        }       }}--对图形特效的处理--对图形进行平移(setTranslate) 旋转(setRotate) 缩放 (setScale)Matrix matrix = new Matrix();--获得图片资源BitMap bitmap = ((BitMapDrawable)getResources().getDrawable(R.drawable.xxx)).getBitMap();--matrix设置--旋转matrix.setSkew(12,0);--缩放  缩放比例matrix.setScale(1.0f);然后利用BitMap bitMap2 = BitMap.createBitmap(bitmap,0,0,width,height,matrix,true) 图片就会和matrix设置的内容进行变换--画布重新绘制新位图资源canvas.drawBitmap(bitMap2,matrix,null);在onDraw方法中进行图片转换设置按键事件的定义SELECT * FROM thrsdeptrequest FOR UPDATE ;gameView.setOnKeyListener(new OnKeyListener(){@Override  public void onKey(View source,int keyCode,KeyEvent event){         --按键时 对某些键进行绑定业务逻辑  如按A和D键分别做相应的事件         switch(event.getKeyCode()){              case KeyEvent.KEYCODE_A:                --DO SOMETHING               break ;               case KeyEvent.KEYCODE_D:                --DO SOMETHING               break ;         }  }});ImageView --定时任务对象final Timer timer = new Timer();-- 每100毫秒执行一次timer.schedule(new TimerTask(){@Override  public void run(){         handler.sendEmptyMessage(0x123);  }},0,100) ;--handler的作用是重新绘制游戏界面的生成final Handler handler = new Handler(){      @Override      public void handleMessage(Message message){             if(message.what == 0x123){                 --游戏界面重新绘制                gameView.invalide();             }      }};--获取位图Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane);--获取图片宽度bitmap.getWidth();--获取图片高度bitmap.getHeight();Canvas 还提供了对扭曲图的支持invalidate();方法通知View组件进行重新绘制drawBitmapMesh方法--触摸屏幕事件public void onTouchEvent(MotionEvent event){       --获取点击处的 X Y坐标       event.getX();       event.getY();       return true ;}逐帧(Frame)在xml中定义逐帧动画用  xxx.xml<animation-list android:oneshot="true|false"> oneshot 设置是否循环播放<item android:drawable="@drawable/test" android:duration="1"/> 定义每一帧的图片和持续的时间</animation-list><item >java代码中使用 AnimationDrawable 提供的两个方法 start和stop方法ImageView imageView = (ImageView)findViewById(xxx);xxx表示xml的文件名称AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();指定点爆炸 其实就是逐帧动画加载音效  声音文件放置在raw文件夹下面MediaPlayer boom = MediaPlayer.create(this,R.raw.boom); boom.start() --播放音乐R.anim.blast 表示一个逐帧动画 逐帧动画一般放置在anim文件夹下面imageView.setBackgroundResource(R.anim.blast);imageView.setVisibility(View.INVISIBLE) ;imageView.setVisibility(View.VISIBLE) ;imageView.setLocation();AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();animationDrawable.start(); --启动动画FrameLayout frame = new FrameLayout(this);frame.setBackgroundResource(R.drawable.xxx);frame.addView(myView);点击屏幕事件 frame.setOnTouchListener(new OnTouchListener(){                            @Override                              public void onTouch(View source,TouchEvent event){                                     if(event.getAction == TouchEvent.ACTION_DOWN){                                       anim.stop();                                       myView.setLocation(event.getX()-40,event.getY()-20);                                        anim.start();                                        --播放声音                                        mediaPlayer.start();                                     }                              }});--少量数据的存储使用SharedPrefences 是以key-value的形式存储数据 接口本身没有写入数据的能力SharedPrefences.edit() -- > Editor对象来实现数据的修改getXxx Xxx可以是int  double boolean float StringSharedPrefences是一个借口 所以只能通过getSharedPrefences("xxx",MODE_WORLD_READABLE);SharedPrefences sp = getSharedPrefences("xxx",MODE_WORLD_READABLE);sp.getString("xx","默认值"); 如果xx对应的值不存在 则获得 第二个参数 即设置的默认值SharedPrefences.Editor editor = sp.edit();editor.putString("xx","12345");--提交所有值editor.commit();SharedPrefences总是以XML的格式保存数据保存在路径 /data/data/<package name>/shared_prefes/ 目录下面获取其他应用程序的SharedPrefences其实就是需要获得该应用程序的ContextContext context = createPackageContext("包名",Context.IGNORE_SECURITY);SharedPrefences sp = context.getSharedPrefences("xxx",MODE_WORLD_READABLE);sp.getInt("xxx",0);--io 流openFileInputStream(String name)openFileOutputStream(String name)--获得SD卡路径File sdCardFile = Environment.getExternalStorageDirectory();String sdPath = sdCardFile.getCanonicalPath();--SD卡写入数据权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">--SQLite数据库 其实就是一个文件   /mnt/data/目录下SQLite数据库其实是通过SQLiteDatabase来操作的一般通过继承SQLiteOpenHelper来获得子类 然后通过getReadableDatabase() getWritableDatabase() 来获得 SQLiteDatabase实例--SimpleAdapter 用法List<Map<String,String>> list = new ArrayList<String,String>();list.put("name1","");list.put("name2","");SimpleAdapter simpleAdapter = new SimpleAdapter(this,list,R.layout.listxx,new String[]{"name1","name2"},new int[]{R.id.name1xxx,R.id.name2xxx});第三个参数是list整体样式第四个参数是与list对应的key值第五个参数是每个内容显示的样式信息ListView listView = (ListView)findViewById(R.id.xx);listView.setAdapter(simpleAdapter);SQLiteDatabase database ;Service继承Service类 然后在 AndroidManifest.xml中定义Intent intent = new Intent();intent.setAction("xxx.xx.First_Service");--参数是AndroidManifest.xml中设置service下的action名称startService(intent);<service android:name=".FirstService">  <intent-filter>  <action android:name="xxx.xx.First_Service">  </intent-filter></service>stopService(intent);service总是在后台运行而不显示在前天绑定本地service与之通信IntentService和Service的区别 就是 IntentService会调用单独的线程来处intentIntentService只需要重写onHandleIntent(Intent intent)方法 不需要重写 onBind和onStartCommand方法IntentService是使用单独的线程来完成耗时任务而不会阻塞前台线程 因此前台界面不会失去响应IntentService会自动停止 而不需要调用stopSelfIntentService是Service的子类 它有一些额外的功能startService(intent) stopService(intent)一些重要的系统Service--电话serviceTelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE) ;--短信管理器SmsManagerSmsManager sManager = SmsManager.getDefault();PendingIntent pendingIntent = PendingIntent.getActivity(this,0,new Intent(),0) ;--发送短信sManager.sendTextMessage(numberStr,null,contentStr,pendingIntent,null) ;--发送短信需要设置权限 <uses-permission android:name="android.permission.SEND_SMS">--音频管理器AudioManager audioManager = (AudioManager)getSystemService(Service.AUDIO_SERVICE) ;--闹钟管理器AlarmManager.set--接收广播消息BroadcastReceiver 专门负责监听各种应用程序发出的Broadcast<receveiver android:name=".FirstReceveiver" ><intent-filter android:priority="0"> android:priority --指定优先等级 值越大优先级越高  <action android:name="xxx.xxx">  </intent-filter></receveiver>Intent intent = new Intent();intent.setAction("xxx.xxx");sendBroadcast(intent);--普通的Broadcast不能传给下一个消息接收者sendOrderedBroadcast(intent);--排序的Broadcast可以传给下一个消息接收者 先后顺序可以用 android:priority来定义SELECT * FROM THRSRESUME FOR UPDATE ;SELECT * FROM TPUBCOUNTER FOR UPDATE;BroadcastReceiver可以监听各个应用IntentService是Service的子类 不是普通的Service 增加了些额外的功能--Activity生命周期1 onCreate  --第一次创建时2 onStart   --用户可以看到界面时3 onResume  --用户获取焦点时4 onPause  --与用户失去焦点5 onRestart --用户重新获得界面时6 onStop   --界面用户不可见时7 onDesdroy--调用finish方法时--消息队列中存放两种信息的队列  有线程对象(Runnable)和消息对象(Message)Handler handler = new Handler();handler.post(runnable);handler.postDelayed(runnable,3000);Handler handler = new Handler(){        public void handleMessage(Message msg){               Bundle bundle = msg.getData();               bundle.getString("");        }};public MyHandler(Looper looper){       this.looper = looper ;}Message msg = handler.obtainMessage();Bundle bundle = new Bundle();bundle.putStringbundle.putInthandler.sendMessage(msg);handleMessage(Message msg)ListActivityListViewTabActivityTabHostsetListAdapter(simpleAdapter);handleMessage(Message msg)msg.setData(bundle);bundle.putString("paramName","paramValue");bundle.putInt("paramName",paramValue);-- 系统自带的线程处理类HandlerThread thread = new HandlerThread();MyHandler handler = new MyHandler(thread.getLooper());Message message = handler.obtainMessage();message.sendToTarget();-- looper的作用就是使handler的线程与activity的线程分开 不会使main线程阻塞singleTask 如果在Task中存在栈顶中如果存在该Activity实例则不重新创建public MyHandler(Looper looper){ super(looper);}public void handleMessage(Message msg){   --处理逻辑}Context context = createPackageContext("xxx.io",xxx);Context context = createPackageContext("xx.io",xxx);SharedPreferences sharedPreferences = context.getSharedPreferences();Editor editor = sharedPreferences.edit();以键值对的形式保存在对应的XML中SELECT TE.*,TD.DEPTNAME FROM THRSEMPLOY TE,TUSCDEPT TD WHERE TE.DEPTID = TD.DEPTID(+)SELECT WM_CONCAT(ROWNUM) FROM DUAL CONNECT BY ROWNUM <= 10;singleInstance 只会创建一个目标Activity实例 并会使用一个全新的Task栈 来装载Activity实例singleTask 目标Activity在同一个Task中只含有一个实例 1.如果不存在则会创建新的Activity实例 并放入栈顶2.如果位于栈顶则不会创建新的Activity实例3.如果实例存在但不在栈顶 则把上面的实例从Task栈中移除 使得该实例位于Task栈顶singleTop 如果目标Activity实例位于Task栈顶 则不会新创建对应的实例 否则会创建新的Activity实例standard 每次都会创建一个新的目标Activity实例 而不会创建一个新的Task 并把Activity加入到对应的Task中WITH T1 AS (SELECT ROWNUM AS N1 FROM DUAL CONNECT BY ROWNUM < 10),T2 AS (SELECT 5 AS N2 FROM DUAL)SELECT T1.N1, T2.N2 FROM T1, T2 WHERE T1.N1 = T2.N2(+);Looper使handler处理的线程不是与activity main线程同一个SQLiteOpenHelper是抽象类所以要继承它 并必须重写构造函数public DatabaseOpenHelper(Context context,String name,CursorFactory factory,int Version)所继承的方法中有方法 onCreate onUpgrade 方法 分别是创建数据库还有升级数据库时调用的方法调用getReadableDatabase()或getWritableDatabase()则创建一个数据库 会调用onCreate方法如果 DatabaseOpenHelper helper = new DatabaseOpenHelper(this,"数据库名字",null,2); 当版本指定为2时说明是升级数据库 则会调用onUpgradeSQLiteDatabase db = helper.getWritableDatebase();db.execSQL("CREATE TABLE TEST (ID INT)");ArrayAdapter adapter = new ArrayAdapter(this,R.layout.xxx,数组或list);listView.setAdapter(adapter);继承ListActivity 或者直接使用ListView标签进行使用--插入操作--键值对的对象 键是表示列名ContentValues content = new ContentValues();--key是表中的列名content.put("id",1000);--插入一条数据db.insert("Test",null,content);--更新数据ContentValues content = new ContentValues();content.put("name","9999")db.update("Test",content,"id=?",new String[]{"1"});--把id为1的name设置成9999SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.query("Test",new String[]{"name","id"},);-- 遍历cursorwhile(cursor.moveToNext()){       String name = cursor.getString(cursor.getColumnIndex("name"));       sysout(name);}ContentValues SQLiteOpenHelper  Bundle bundle = new Bundle();bundle.putStringbundle.putIntbundle.putFloatbundle.putDouble                                                                                          SELECT T.PID, COUNT(T2.N)  FROM TEXMPAPER T, (SELECT 90 N FROM DUAL) T2 WHERE T.PID = T2.N(+) GROUP BY T.PID;SELECT WM_CONCAT(ROWNUM)  FROM DUAL CONNECT BY ROWNUM<=10 ;--多行的同一列合并成同一行SELECT WM_CONCAT(T.PID) FROM TEXMPAPER T ;MediaPlayer提供下列方法进行对音频文件进行操作start();stop();pause();create();setDatasource();setDatasource调用该方法后并没有完全准备好 需要调用prepare()方法然后再调用start等方法播放网络上的音频文件MediaPlayer player = new MediaPlayer();Uri uri = Uri.parse("http://xxx/xx.mp3");player.setDatasource(context,uri);--准备声音player.prepare();player.start();--还有个准备方法 异步准备音频文件 不会阻塞UI线程player.prepareAsync();--播放视频VideoView 和 MediaControllerVideoView videoView = (VideoView)findViewById(R.id.xxx);MediaController mController = new MediaController(this);File file = new File("/mnt/xxx.mp4");--把视频显示在VideoView组件上videoView.setVideoPath(file.getAbsolutePath());--把VideoView和MediaController结合起来videoView.setMediaController(mController);mController.setMediaPlayer(videoView);--让视频获得焦点videoView.requestFocus();SELECT CONCAT(T.PID||'-',T.PNAME) FROM TEXMPAPER T ;SELECT * FROM THRSINTERVIEW for update;HandlerThread thread = new HandlerThread();thread.getLooper();thread.start();MyDatabaseHelper handler = new MyDatabaseHelper();Message msg = handler.obtainMessage();msg.setData(bundle);msg.sendToTarget();MyDatabaseHelper extents SQLiteOpenHelper{ public MyDatabaseHelper(Looper looper){        super(looper); } public void handleMessage(Message message){         }}handler.post(runnalbe);Runnalbe runnable = new Runnable(){         @Override         public void run(){                --do anything you want          }};handler.postDelayed(runnable,3000);handler.post(runnable);--post方法使消息队列中的任务得到处理Filter when it is good at it OpenFileInputOpenFileOutput--资源图片转换成Bitmap对象Bitmap bitmap = ((BitmapDrawable)context.getResources().getDrawable(R.id.xxxx)).getBitmap();Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.drawable.xxxImg);final Matrix matrix = new Matrix();matrix.setTranslate();--当前视图获得焦点this.setFocusable(true);--使得matrix对象重置matrix.reset();matrix.setScale(1.0f,1.0f);Bitmap bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);BitmapFactory是一个工具类createBitmap是Bitmap类的静态方法canvas.drawBitmap(bitmap2,matrix,null);handler不会因为处理业务逻辑的时间过长导致UI线程阻塞HandlerThread thread = HandlerThread();Looper looper = thread.getLooper();public class MyHandler extends Handler{       public MyHandler(Looper looper){              super(looper);       }}select * from test t for update ; ImageView imageView = (ImageView)findViewById(R.id.xxxImg);--ImageView和Bitmap关联在一起时imageView.setImageBitmap(BitmapFactory.decodeFile(filePath));--通过ImageView获得BitmapBitmapDrawable bitmapDrawable = (BitmapDrawable)imageView.getDrawable();Bitmap bitmapx = bitmapDrawable.getBitmap();--AnimationDrawable逐帧动画 它是由ImageView通过getBackground方法来进行获得AnimationDrawable ad = (AnimationDrawable)imageView.getBackground();ad.start() 或 ad.stop();imageView.setBackgroundResources(R.anim.blast);blast.xml<animation-list><item android:drawable="@drawable/bom_01" android:duration="100"/>  <item android:drawable="@drawable/bom_02" android:duration="100"/></animation-list>Intent intent = new Intent();intent.setAction("xxxxx.SecondActivity");action是需要在清单文件 AndroidManifest.xml进行配置的如:<activity android:name=".SecondActivity" android:label="@drawable/secondLabel"><intent-filter>   <action android:name="xxxxx.SecondActivity" />一个activity可以设置多个action name    <action android:name="LSSDDD.XXXX" />  </intent-filter></activity>startActivity(intent)Intent serviceIntent = new Intent();serviceIntent.setAction("xxxService");<service android:name='xx.xx.xxxService'><intent-filter>   <action android:name="xxxService" />为service设置ActionName  </intent-filter></service>startService(intent);Service --->IntentServiceint onStartCommand(Intent intent,int flag,int startId) --->void onHandleIntent(Intent intent)select * from thrsinterview for update ;SELECT * FROM thrsemploy FOR UPDATE ;SELECT * FROM thrsemployeval FOR UPDATE ;public class MyService extends Service{       private int count ;       private boolean quit = false ;       private MyBinder binder = new MyBinder();       public class MyBinder extends Binder{              public int getCount(){                     return count ;              }       }       // 必须返回所绑定的对象       @Override       public IBinder onBinder(Intent intent){              System.out.println("xxxxxxxx");              return binder ;       }       @Override       public void onCreate(){              super.onCreate();              new Thread(){                  @Override                  public void run(){                         while(!quit){                              count++;                         }                  }              }.start();       }        @Override        public void onDestroy(){               super.onDestroy();               this.quit = true ;        }}public class MyBinderService extends Activity{       MyService.MyBinder binder ;       final Intent intent = new Intent();       Button button ;       intent.setAction("binderService");       @Override        public void onCreate(Bundle dxx){             super(dxx);             //intent 通过参数来获得要启动的Service             // conn 监听访问者与Service之间的连接             // 第三个参数表示绑定时是否自动创建Service BIND_AUTO_CREATE表示自动创建             bindService(intent,conn,Service.BIND_AUTO_CREATE);             button = (Button)findViewById('xxxx');             button.setOnClickListener(new OnClickListener(){             @Override              public void onClick(View source){              Toast.makeText(this,"service中的值---->"+binder.getCount(),Toast.LENGTH_SHORT).show();              }             });             unbindService(conn);       }       --只要activity和service一连接就获得对应的Binder对象 就可以通过该绑定对象可以获得service运行的值       private ServiceConnection conn = new ServiceConnection(){              @Override              public void onServiceConnected(Intent intent ,IBinder bind)              {                     binder = (MyService.MyBinder)bind;              }       }}MyBinder extends Binder 就可以访问 MyService里面的值  而在Activity中获得Binder对象则需要通过ServiceConntectionServiceConntection connection = new ServiceConntection(){@Override  public  void onServiceConnected(Intent intent,IBinder service){          binder = (MyService.MyBinder)service ;  }}当程序在调用unbindService(conn) 首先会调用onUnBind方法 然后再调用onDestroy方法









更多相关文章

  1. Android学习笔记之——UI设计
  2. RecyclerView详解(二):ItemDecoration使用(kotlin)
  3. unity在android显示界面(UnityPlayerActivity)不重复加载且app退出
  4. Android(安卓)最火框架XUtils之注解机制详解
  5. 三种方法使android 手机执行 二进制程序
  6. Android异常解决--A WebView method was called on thread 'Java
  7. Android_判断文件是否存在并创建代码
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android集成okhttp
  2. Android的帧布局
  3. 获取Android(安卓)Device的信息
  4. Android(安卓)WebView 使用方法,可以解决w
  5. android使用retrofit
  6. Android(安卓)遍历ListView条目控件
  7. android使用SharedPreferences保存值,值变
  8. android平台上20个自由移动的小球
  9. My Android(安卓)Bugs
  10. android 多点触摸 放大 缩小 图片