zoukankan      html  css  js  c++  java
  • 《疯狂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的方法
  • 相关阅读:
    小例子-使用JS/JQ获取a标签的href网址
    R语言随手记-线性回归模型诊断
    R语言随手记-数据处理
    正选择分析-PAML discussion group
    ggtree-基本函数使用
    PhastCons
    R语言随手记-批量读取和循环处理多个数据文件
    变异位点有害性软件评估
    ggplot画图-分页and排序
    R画图-标题和坐标轴篇
  • 原文地址:https://www.cnblogs.com/sunyanyan/p/5109160.html
Copyright © 2011-2022 走看看