《疯狂Android讲义》

《疯狂Android讲义》笔记


第二章 android应用的界面编程

2.1 开发自定义的View

继承View基类的子类,然后重写View中的方法。

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及其子类

子类:

  • ImageButton

    • ZoomButton:可以代表放大缩小按钮
    • ZoomControls:
  • QuickContactBadge:关联联系人

      //一个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(列表视图)

      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):通过星星来表示进度

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的方法
原文地址:https://www.cnblogs.com/sunyanyan/p/5109160.html