《瘋狂Android講義》

《瘋狂Android講義》筆記


第二章 android應用的界面編程

2.1 開發自定義的View

繼承View基類的子類,而後重寫View中的方法。android

onFinishInflate(): 當應用從XML佈局文件加載該組件並利用它來構建界面以後,該方法將會被回調。

onMeasure(int,int): 調用該方法來檢測View組件及它所包含的全部子組件的大小。

onLayout(boolean,int,int,int,int): 當該組件須要分配其子組件的位置、大小時,該方法就會被會回調。

onSizeChanged(int,int,int,int): 當該組件的大小被改變時回調該方法。

onDraw(Canvas): 當該組件將要繪製它的內容時回調該方法進行繪製。

onKeyDown(int,KeyEvent): 當某個鍵被按下時觸發該方法。

onKeyUp(int,KeyEvent): 當鬆開某個鍵時觸發該方法。

onTrackballEvent(MoyionEvent):當軌跡球事件時觸發該方法。

onTouchEvent(MotionEvent): 當發生觸摸屏事件時觸發該方法。

onWindowFocusChanged(boolean): 當該組件獲得、失去焦點時觸發該方法。

onAttachedToWindow(): 當把該組件放入某個窗口時觸發該方法。

onDetachedFromWindow(): 當把該組件從某個窗口上分離時觸發該方法。

onWindowVisibilityChanged(int): 當包含改組件的窗口的可見性發生改變時觸發該方法。

2.3 UI組件 textView及其子類

  • 實例:不一樣顏色、字體、帶鏈接的文本(使用textview xml屬性)
  • 實例:圓角邊框。漸變背景的textview(使用xml文件當成drawable 寫入background)
  • 實例:利用單選按鈕、複選框獲取用戶信息(RadioButton、CheckBox )
  • 實例:動態改變佈局(ToggleButton 、 Switch)
  • 時鐘(AnalogClock、DigitalClock)
    • AnalogClock模擬時鐘,DigitalClock顯示數字時鐘
  • 計時器(Chronometer)
    • setBase(long) 設置計時器的起始時間
    • setFormat(String) 設置顯示時間額格式
    • start()
    • stop()
    • setOnChronometerTickListener() 當計時器改變時觸發該監聽器。

2.4 UI組件 imageView及其子類

子類:git

  • ImageButton
    • ZoomButton:能夠表明放大縮小按鈕
    • ZoomControls:
  • QuickContactBadge:關聯聯繫人web

    //一個ImageView現實另外一個Image的局部圖片
      Bitmap bitmao = bitmaoDrawable.getBitmao();
      image2.setImageBitmap(Bitmap.createBitmap(bitmap,x,y,120,120));
      image2.setAlpha(alpha);

2.5 UI組件:AdapterView及子類

  • Adapter經常使用實現類:
    • ArrayAdapter:
    • SimpleAdapter:
    • SimpleCursorAdapter:
    • BaseAdapter:
  • ListView(列表視圖)sql

    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,R.layout.checked_item,arr2);
      list2.setAdapter(adapter2);
      //建立ArrayAdapter須要指定的參數
      //context、textViewResourceId(表明一個TextView,指定佈局)、數組或list(指定內容數據)
  • 使用SimpleAdapter建立ListView
  • AutoCompleteTextView,MutiAutoCompleteTextView(自動完成文本框)
  • gridview(網格視圖)
  • sinner 下拉框
  • AdapterViewFlipper數據庫

2.6 UI組件,ProgressBar及其子類

  • 進度條
    • 環形進度條(不能顯示進度) 和 水平進度條
    • 顯示在標題上的進度條
  • 顯示在標題上的進度條編程

    //設置窗口特徵 : 啓用顯示進度的進度條
      requestWindoeFeature(Window.FEATURE_PROGRESS);      //設置窗口特徵: 啓用不顯示進度的進度條
      requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
      //調用Activity的 setProgressBarVisibility(boolean) 或者 setProgressBarIndeterminateVisibility(boolean)便可控制進度條的顯示和隱藏
  • 拖動條(seekBar) (繼承了ProgresBar)
  • 星級評分條(RatingBar):經過星星來表示進度canvas

2.7 UI組件,ViewAnimator及其子類

  • ViewSwitcher:表明視圖切換組件
  • ImageSwitcher(圖片切換器)
    • 爲ImageSwitcher提供一個ViewFactory,viewFactory生成的View組件必須是ImageView
    • 切換圖片時 只要調用ImageSwitcher的setImageDrawable , setImageResource, setImageURI方法更換圖片

2.7.4到第三章之間先跳過把
***數組

第三章android的事件處理

3.2基於監聽的事件處理

android爲不一樣的界面組件提供了不一樣的監聽器接口,好比View服務器

  • View.OnClickListener:單擊事件的事件監聽器必須實現的接口。
  • View.OnCreateContextMenuListener:建立上下文菜單時間的時間監聽器必須實現的接口。
  • View.OnFocusChangeListener:焦點改變事件的事件監聽器必須實現的接口。
  • View.OnKeyListener:按鍵時間監聽器必須實現的接口。
  • View.OnLongClickListener:長單擊時間的事件監聽器必須實現的接口。
  • View.OnTouchListener:觸摸屏事件的事件監聽器必須實現的接口。

3.4響應系統設置的事件

//調用Activity的以下方法來獲取系統的Configuration對象
Configuration cfg = getResource().getConfiguration();
//而後使用Configuration對象的屬性來獲取系統配置 

在Activity中重寫 onConfigurationChanged來響應系統設置更改。

3.5handler消息的傳遞機制

  • 主UI線程中系統已經初始化了一個Looper對象,所以程序直接建立Handler便可
  • 本身啓動的子線程,必須建立一個Looper對象並啓動它
    • 調用Looper的prepare()方法爲當前線程建立Looper對象
    • 調用Looper的loop()方法來啓動Looper

3.6異步任務 asynctask

在新線程中更新UI組件方法網絡

  • 使用Hanlder
  • Activity.runOnUiThread(Runnable)
  • View.post(Runnable)
  • View.postDelayed(Runnable,long)

使用AsyncTask:

  1. 建立AsyncTask子類
  2. 實現doInBackground(Params...):後臺線程要完成的任務
  3. 實現obPregressUpdate(Progress... values):在doInBackground()方法中調用publisjProgressUpdate()方法更新任務進度,將會觸發該方法。
  4. onPreExecute():該方法在執行後臺耗時操做錢被調用,通常用於完成初始化準備工做。
  5. onPostExecute(Result result):當doInBackground()完成後,會自動調用obPostExecute()
  6. 使用AsyncTask的實例execute(Params...params)開始耗時任務。

第四章 深刻了解Activity與Fragment

Activity:

  • LauncherActivity
  • ExpandableListActivity
  • preferenceActivity 配合PreferenceFragment

啓動關閉Activity

  • startActivity(Intent intent) ;startActivityForResult(Intent intent,int requestCode)
  • finish() ; finishActivity(int requestCode)
  • startActivityForResult()啓動的Activity應該 調用setResult返回結果,當前activity重寫OnActivityResult接收結果

使用Bundle在Activity之間交換數據

  • Intent
    • putExtras(Bundle data) ; getExtras()
    • putExtra(String name,xxx value) ; getXxxExtra(String name)
  • Bundle
    • putXxx(String key,Xxx data) ; getXxx(String key)
    • putSerializable(String key,Serializable data) ; getSerializable(String key , Serializable data)

生命週期與加載模式

  • 生命週期
    • onCreate()
    • onStart()
    • onRestart()
    • onResume()
    • onPause()
    • onStop()
    • onDestory()
  • 加載模式 (配置Activity時指定android:launchMode屬性)
    • standard:默認。爲目標Activity建立新的實例,並將實例添加到當前Task棧中。
    • singleTop:若啓動目標Activity已經位於Task棧頂,系統不會建立新的實例,不然與standard模式相同
    • singleTask :
      • 若目標Activity不存在,則建立並加入棧頂
      • 若目標Activity已經位於棧頂,則與singleTop相同
      • 若目標Activity存在,且不位於棧頂,則將該activity上的其餘activity都移出棧
    • singleInstance 在全部Task中只會建立一個目標Activity

fragment

回調:

  • onCreate():初始化必要組件
  • onCreateView():返回一個該Fragment所顯示的View
  • onPause(): 當用戶離開
  • onAttach():當該Fragment被添加、顯示到Activity時,回調
  • onDetach():當該Fragment從它所屬的Activity中被刪除時回調

與Activity通訊:

  • 將Fragment添加到Activity
    • 在佈局文件中使用<fragment ../>元素添加Fragment,在該元素中的android:name屬性中知道Fragment實現類
    • 經過FragmentTransaction對象的add()方法添加Fragment
  • 互相獲取
    • 在Fragment中調用getActivity()方法獲取它所在的Activity
    • 在Activity中 調用FragmentManager 對象的findFragmentById()或findFragmentByTag()方法獲取指定的Fragment。
  • 傳遞數據
    • Activity向Fragment傳遞數據:建立Bundle 調用fragment 的setArguments()方法將Bundle傳給Fragment
    • Fragment向Activity傳遞數據:Activity實現Fragment的內部回調接口
  • 事務 FragmentTransaction
    • 表明Activity對Fragment執行的多個改變
    • 包含調用多個add()、remove()、replace()最後調用commit()提交。

      跳過第六章

第七章圖形與圖像處理

Bitmap

  • createBitmap(Bitmap source, int x,int y, int width , int height): 從源位圖source的制定座標點(x,y)開始挖取寬width,高height的 bitmap對象。
  • createScaledBitmap(Bitmap src,int dstWidth,int dstHeight,boolean filter):對源位圖進行縮放,縮放成寬dstWidth,高dstHeight的新位圖
  • createBitma(Bitmap source,int x,int y,int width,int height,Matrix m,boolean filter):從源位圖的指定座標開始挖取指定寬高的bitmap對象,並進行Matrix變換
  • boolean isRecycled();返回Bitmap對象是否已被回收
  • void recycle()強制Bitmap對象當即回收本身。

BitmapFactory :提供大量方法來解析、建立Bitmap對象

  • decodeByteArray(bytr[] data, int offset , int length):從指定字符數組的offset位置 將長度爲length的字節數據解析成Bitmap
  • decodeFile(String pathName):從指定文件建立Bitmap
  • decodeFileDescriptor(FileDescriptor fd):從FileDescriptor對應文件建立Bitmap
  • decodeResource(Resources res,int id):用於根據給定資源ID建立Bitmap
  • decodeStream(InputStream is):從輸入流中建立Bitmap

繪圖

重寫View的onDraw(Canvas canvas)方法

canvas:舉幾個方法

  • drawArc(RectF oval,float startAngle, float sweepAngle,boolean useCenter,Paint paint) 繪製弧
  • drawBitmap(Bitmap bitmap,Rect src ,Rect dst,Paint paint) :在指定點繪製從源位圖的區域
  • drawText(String text,int start,int end,Paint paint):繪製字符串
  • clipRect(float left,float right,float bottom):剪切一個矩形區域
  • rotate(float degress,float px,float py):旋轉

Paint:畫筆

  • setARGB(int a,int r,int g,int b)/setColor(int color)
  • setPathEffect(PathEffect effect):設置繪製路徑時的路徑效果
  • setStyle(Paint , Join join):設置畫筆轉彎處的連接風格

圖形特效處理

Matrix控制變換

  • setTranslate(float dx,float dy):控制Matrix進行平移
  • setSkew(float kx,float ky,float px,float py):控制Matrix以px,py爲軸心傾斜。
  • setSkew(float kx,float ky):傾斜
  • setRotate(float degress):旋轉
  • setScale(float sx , float sy):縮放

使用 Shader 填充Paint,它自己是個抽象類,提供了以下實現類

  • BitmapShader:使用位圖平鋪的渲染效果
  • LinearGradient:使用線性漸變來填充圖形
  • RadialGradient:使用圓形漸變來填充圖形
  • SweepGradient:使用角度漸變來填充圖形
  • ComposeShader:使用組合渲染來填充圖形

逐幀動畫

  • 使用xml定義AnimationDrawable

    <animation-list xmlns:android="...." android:oneshot="true">
      <item android:drawable="res_name" android:duration="10" >
      <item android:drawable="res_name" android:duration="10" >
      ...
      </animation-list>
  • 將AnimationDrawable設置爲View的背景

    view.setBackgroundResource(R.anim.animationDrawable);
      anim = (AnimationDrawable)view.getBackground();
  • 使用start() 開始動畫,使用stop:中止動畫

補間Tween動畫

  • 包括以下幾個子類
    • AlphaAnimation :透明度
    • ScaleAnimation: 縮放
    • TranslateAnimation:位移
    • RotateAnimation:旋轉
  • 使用AnimationUtils工具類加載

使用屬性動畫

  • 建立ValueAnimator或ObjectAnimator
  • 爲Animator對象設置屬性
  • (可選)監聽動畫事件
  • 如有多個動畫,使用AnimatorSet組合動畫
  • 使用start()啓動動畫

第八章數據存儲與io

SharedPreferences輕量儲存

  • 獲取SharedPreferences

    經過Context提供的getSharedPreferences(String name,int mode);
      mode的值有:
      Context.MODE_PRIVATE:指定數據只能被本應用讀寫
      Context.MODE_WORLD_READABLE:指定數據能被其餘應用讀
      Context.MODE_WORLD_WRITEABLE:指定數據能被其餘應用讀寫
  • 得到儲存的數據

    SharedPreferences.getXXX(String key,xxx defValue)
  • 編輯數據,經過Editor對象(SharedPreferences.edit())

    SharedPreferences.Editor clear():清空數據
      SharedPreferences.Editor putXXX(String key,xxx value):存入數據
      SharedPreferences.Editor remove(String key) :刪除指定數據
      boolean commit():編輯完後提交

file存儲

SQLite數據庫

手勢

GestureDetector表明一個手勢檢測器

GestureDetector.OnGestureListener:

  • boolean onDown(MotionEvent e):按下
  • boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY):滑動,velocityX、velocityY表明滑動的速度
  • void onLongPress(MotionEvent e):長按
  • boolean onScroll(MotoinEvent e1,MotionEvent e2,float distanceX,float distanceY):滾動
  • void onShowPress(MotionEvent e):按下
  • boolean onSingleTapUp(MotionEvent e):輕擊

使用GestureLibrary表明手勢庫,來添加和檢測手勢


第九章 使用contentprovider

使用contentptovider、ContentResolver實現數據交換

  • 定義本身的ContentProvider,繼承ContentProvider基類
  • 在AndroidManifest.xml 中註冊
  • 實現如下方法

    public boolean onCreate();
      public Uri insert(Uri uri,ContentValues values);
      public int delete(Uri uri,String selection,String[] selectionArgs);
      public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs);
      public Cursor query(Uri uri,String[] projection ,String selection,String[] selectionArgs,String sortOrder);
      public String getType(Uri uri)
  • 經過Context.getContentResolver()獲取ContentResolver對象
  • 經過ContentResolver對象的對應方法來對ContentProvider數據進行增刪改查操做

  • 經過ContentProvider來監聽ContentProvider數據的改變
    • ContentProvider數據發生改變時程序就調用了 getContent().getContentResolver().notifyChange(uri,null)
    • 而後就會觸發監聽器的 onChange(boolean selfChange)方法
    • 使用 getContentResolver().registerContentOBserver(Uri.parse("Content://sms"),true,new Smsobserver(new Handle()));

第十章 service和broadcastReceiver

service

  • 生命週期

    IBinder onBinder(Intent intent):Ibinder用於通訊;
      void onCreate()
      void onDestroy()
      void StartCommand(Intent intent,int flags,int startId):每次調用startService(intent)都會回調
      boolean onUnbind(Intent intent):當Service上全部綁定的對象都斷開鏈接時都會回調
  • 啓動中止方式:
    • 經過 content的startService(intent) ,stopService(intent)
    • 經過 content的bindService(), unbindService()
  • 與Service通訊
    • 在service中自定義個IBinder對象,該對象處理通訊
    • 在activity中經過bindService(Intent service,ServiceConnection conn,int flags)啓動service,在 ServiceConnection對象的回調onServiceConnected(ConponentName name,Ibinder service)中獲取IBinder對象

intentService

特色:

  • 會建立單獨的worker線程處理全部的intent請求
  • worker線程處理OngandleIntent(),無須處理多線程
  • 全部請求處理完會自動中止
  • 默認實現OnBind()返回null
  • 默認實現onStartCommand(),將請求intent添加到隊列

跨進程調用service(AIDL Service)

  1. 建立AIDL文件
    • 定義完AIDL接口後,會自動生成一個接口,該接口內包含一個Stub內部類,該類實現了Ibinder、ICat兩個接口,而其中Stub將會做爲遠程Service的回調類 ,做爲service的onBind()的返回值
  • 實現service
    • 使Ibinder繼承Stub,也就是實現ICat接口
    • 在onBinder中返回自定義的Ibinder對象
  • 在客戶端中複製響應的AIDL接口文件
  • 在serviceConnection 的onServiceConnected回調中獲取Service onBind()中對象的代理

    如:
      catService = ICat.stub.asInterface(service)

電話管理器(TelephonyManager)

  • 獲取TelephonyManager

    TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  • 獲取網絡和SIM卡信息(各類 getXXX() 方法)
  • 監聽手機來電

    PhoneStateLister listener = new PhoneStateLister(){...};
      tManager.listener(listener,PhoneStateLister.LISTEN_CALL_STATE);

短信管理器(SmsManager)

SmsManager sManager = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getActivity(context,0,new Intent(),0);
//發送短信
sManager.sendTextMessage(number.toString,null,contentString,pi,null);

AudioManager

AudioManager aManager = (AudioManager)getSystemService(Service.AUDIO_SERVICE);

//調節音樂 增大音量
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,AudioManager.FLAG_SHOW_UI);
//下降 音樂 音量
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,AudioManager.FLAG_SHOW_UI);
//根據 isChecked肯定是否靜音
aManager.setStreamMute(AudioManager.STREAM_MUSIC,isChecked);
  • setMicrophoneMute(boolean on):設置麥克風靜音
  • setMode(int mode):設置聲音模式
  • setRingerMode(int ringerMode):電話鈴聲模式
  • setSpeakphoneOn(boolean on):是否打開擴音器
  • setStreamMute:
  • setStreamVolume(int streamType.int index,int flags):直接設置手機的制定類型的音量值

Vibrator震動器

  • 獲取

    Vibrator vibrator = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
  • vibrate(long molliseconds):震動制定毫秒
  • vibrate(long[] pattern,int repeat):如 pattern爲 [400,800,1200,1600]制定在這些時間點交替啓動關閉震動
  • cancel():關閉

AlarmManager

本質是一個全局定時器

  • 獲取

    AlarmManager aManager = (AlarmManager)getSystemService(Service.ALARM_SERVICE);
  • set(int type,long triggerAtTime,PendingIntent operation):設置在triggerAtTime啓動由operation制定的組件,type包括:
    • ELAPSED_REALTIME:
    • ELAPSED_REALTIME_WAKEUP:即便關機也會執行
    • RTC:當System.currenTimeMillis()與TriggerAtTime相等時啓動
    • RTC_WAKEUP:
    • setInexactRepeating(int type,long triggerAtTime,long interval,PendingIntent opertion):非精準週期性任務
    • setRepeating(int type,long triggerAtTime,long interval,PendingIntent opertion)
    • cancel(PendingIntent opertion) :取消

BroadcastReceiver

  • 有本身的進程,只要有匹配的intent廣播出來,就會被系統建立
  • 被建立後會觸發它的onReceive()方法,執行完就會被銷燬
  • onReceive()方法要在10秒內完成,因此耗時操做能夠啓動service來完成
  • 指定要監聽的intent

    IntentFilter filter = new IntentFilter(「。。。」);
      IncomingSmsReceiver receiver = new IncomingSmsReceiver();
      registerReceiver(receiver,filter);
      //也能夠在AndroidManifest.xml中配置
  • 發送廣播
    • 普通廣播:sendBroadcast()。邏輯上同一時刻被全部接受者接收到,且沒法終止Broadcast intent的傳播
    • 有序廣播:sendOrderBroadcast():按照預先聲明的優先級幾回接收Broadcast,能夠終止 Broadcast intent的傳播,也能夠向Broadcast intent中插入數據,且能夠被下一個接收者獲取到。
      ***

第十一章多媒體

MediaPlayer

  • 加載並建立
    • sttic MediaPlayer create(Context context,Uri uri):從指定Uri裝載音頻文件,並返回新建立的MediaPlayer
    • static MediaPlayer create(Context context , int resid):從resid資源ID對應的資源文件中裝載音頻文件,並返回新建立的MediaPlayer對象
  • 控制播放方法
    • start()
    • stop()
    • pause()
    • prepare(),開始去裝載指定的音頻文件
    • reset()
  • 裝載音頻方法:
    • setDataSource(String path):指定裝載path路徑所表明的文件
    • setDataSource(FileDescriptor fd,long offset ,long length)
    • setDataSource(FileDescriptor fd)
    • setDataSource(Context context,Uri uri)
  • 事件監聽器
    • setOnCompletionListener(MediaPlayer.OnCompletionListener listener):監聽播放完成
    • setOnErrorListener(MediaPlayer.OnErrorListener listener):監聽播放錯誤
    • setOnPreparedListener(MediaPlayer.OnPreparedListener listener):當調用prepare()時調用
    • setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener):當調用seek()方法時觸發

使用SoundPool播放音效

  • SoundPool(int maxStreams,int streamType,int srcQuality):第一個參數指定支持多少個聲音,第二個參數指定聲音類型,第三個參數指定聲音品質
  • load(Context context,int resId,int priority):從resid所對應的資源加載聲音
  • load(FileDescriptor fd,long offset,long length,int priority):加載fd對應的文件offset開始,長度爲length
  • load(String path,int priority)
  • int play(int soundID,float leftVolume,float rightVolume,int priority,int loop,float rate):播放聲音

    SoundPool soundPool = new SoundPool(10,AudioManager.STREAM_SYSTEM,5);
    
      HashMap<Integer,Integer> soundMap = new HashMap<Integer ,Inreger>();
      soundMap.put(1,soundPool.load(this,R.raw.bomb),1);
      soundMap.put(2,soundPool.load(this,R.raw.shot),1);
    
      soundPool.play(soundMap.get(1),1,1,0,0,1);

使用MediaPlayer 和 SurfaceView 播放視頻

使用MediaRecorder錄製音頻

  1. 建立MediaRecorder對象
  • setAudioSource()設置聲音來源,通常傳入MediaRecorder.AudioSource.MIC錄製來自麥克風的聲音
  • setOutputFormat()設置錄製的音頻文件格式
  • setAudioEncoder()、setAudioEncodingBitRate(int bitRate)、setAudioSamplingRate(int samplingRate)設置錄製聲音的編碼格式、編碼位率、採樣率
  • setOutputFile(String path)設置錄製的 音頻文件的保存位置
  • prepare():準備錄製
  • start():開始錄製
  • stop():中止錄製,並調用release()方法釋放資源。

使用MediaRecorder錄製視頻

接上,在調用setAudioSource(int audio_source)方法時再調用setVideoSource(int video_source)設置圖像來源

  • 調用 setVideoEncoder()、setVideoEncodingBitRate(int bitRate)、setVideoFrameRate,設置所錄製的視頻編碼格式,編碼位率,每秒多少幀
  • setPreviewDisplay(Surface sv):使用SurfaceView預覽

使用camera拍照


第12章opengl與3d應用開發

跳過


第13章網絡應用

ServerSocket 與 Socket

使用URL訪問網絡資源

  • String getFile():獲取資源名
  • String getHost():獲取主機名
  • String getPath():獲取URL路徑
  • int getPath():獲取端口號
  • String getProtocol():獲取協議名
  • String getQuery():獲取URL查詢部分字符串
  • URLConnection openConnection():返回一個URLConnection對象
  • InputStream openStream():打開URL鏈接

    URL url = new URL(「http://www.xxx.xx.xx.png」);
      InputStream is = url.opeanStram();

使用URLConnection提交請求

  • 調用URL對象openConnection()方法來調用URLConnection對象
  • setRequestProperty():設置通用請求屬性
  • connect():創建實際的鏈接
  • getInputStream():讀取URL響應
  • setDoOutput()、setDoInput()發送POST請求須要
  • getOutputStream():獲取輸出流

使用HttpURLConnection

URLConnection的子類

  • int getResponseCode():獲取服務器的響應代碼
  • String getResponseMessage():獲取服務器的響應消息
  • String getRequestMethod():獲取發送請求的方法
  • void setRequestMethod(String method):設置發送請求的方法

使用HttpClient

httpClient會自動維護與服務器之間Session狀態

  1. 建立HttpClient對象
  • 建立HttpGet對象發送GET請求;建立HttpPost對象發送POST請求。
  • HttpGet、HttpPost均可以使用setParams()添加請求參數;HttpPost可使用SetEntity()設置請求參數
  • 調用execute()發送請求,返回一個HttpResponse
  • 調用HttpResponse的getAllHeaders()、getHeaders()等方法能夠獲取服務器的響應頭;調用HttpResponse的getEntity()能夠獲取HttpEntity對象,該對象包裝了服務器的響應內容

    HttpClient httpClient = new DefaultHttpClient();
      HttpGet get = new HttpGet("http://xx.xxx.xx/xx.jsp");
      HttpResponse httpResponse = httpClient.excute(get);
      HttpEntity entity = httpResponse.getEntity();
      BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent));
      ....
    
      HttpPost post = new HttpPost("Http://xx.xxx.xx/xx.jsp");
      List<NameValuePair> params = new ArrayList<NameValuePair>();
      params.add(new BasicNameValuePair("name",name));        params.add(new BasicNameValuePair("pass",pass));
      post.setEbtity(new UrlEncodeFromEntity(params,HTTP.UTF_8));
      HttpResponse response = httpClient.excute(post);
      if(response.getStatusLine().getStatusCode() == 200){
          ...
      }

使用WebView視圖

  • void goBack()
  • void goForward()
  • void loadUrl(String url)
  • boolean zoomIn()
  • boolean zoomOut()
  • loadData(String data,String mimeType,String encoding):加載顯示HTML代碼
  • loadDataWithBaseURL(String baseUrl,String data,String mimeTyep,String encoding)
  • 使用WebView中的JavaScript調用Android方法
    • 調用WebView關聯的WevSettings的setJavaScriptEnabled(true)啓用 JavaScript調用功能
    • 調用WebView的addJavascriptInterface(Object object,String name)方法將object對象暴露給JavaScript
    • 在JavaScript腳本中經過剛纔暴露的name對象調用Android的方法
相關文章
相關標籤/搜索