Android_study01

来源:互联网 发布:软件工程项目管理 编辑:程序博客网 时间:2024/05/18 12:32

简单网络的应用:httpURLconnection笔记

1.Android 更新UI的两种方法——handler和runOnUiThread()

在使用网络的访问过程中,经常需要UI组件的更新,更新UI是要主线程来更新的,即UI线程更新。

如果在主线线程之外的线程中直接更新页面显示常会报错。
方法一:
在Activity.onCreate(Bundle savedInstanceState)中创建一个Handler类的实例, 在这个Handler实例的handleMessage回调函数中调用更新界面显示的函数。
简单的说:在UI线程中去创建一个handler对象,复写handlemessage方法,然后在workthread中调用handler的sendmessage方法,然后交给UI线程中的handlemessage方法来处理。
代码片段:
 updateUIBtn.setOnClickListener(new View.OnClickListener() {  
              
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                UIHandler UIhandler = new UIHandler();  
                UIThread thread = new UIThread();  
                thread.start();  
            }  
        });  

private class UIHandler extends Handler{  
        @Override  
        public void handleMessage(Message msg) {  
            // TODO Auto-generated method stub  
            super.handleMessage(msg);  
            Bundle bundle = msg.getData();  
            String color = bundle.getString("color");  
            UITxt.setText(color);  
        }  
    }  
    private class UIThread extends Thread{  
        @Override  
        public void run() {  
            try {  
                Thread.sleep(3000);  
            } catch (InterruptedException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
            Message msg = new Message();  
            Bundle bundle = new Bundle();  
            bundle.putString("color", "黄色");  
            msg.setData(bundle);  
            MainActivity.this.UIhandler.sendMessage(msg);  
              
        }  
方法二:利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 这样Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程.
MainActivity.this.runOnUiThread(new Runnable() {  
                    @Override  
                    public void run() {  
                        // 在这里把返回的数据写在控件上 会出现什么情况尼  
                        loginState.setText(result);  
                    }  
                });  
二:ByteArrayOutputStream
字节数组流:输出流
ByteArrayOutputStream:    可以捕获内存缓冲区的数据,转换成字节数组。
ByteArrayoutputStream bout=new ByteArrayOutputStream();
bout.write(int a);  bout.write(int b);  bout.write(int c);
byte[] buf=bout.toByteArray();//获取内存缓冲中的数据
for(int i=0;i<=buf.length;i++)
{
  System.out.println(buf);
}
bout.close()
;
例子2
 if(urlConnection.getResponseCode()==200)
            {
            // 获取响应的输入流对象  
            InputStream in=urlConnection.getInputStream();
            // 创建字节输出流对象  
                ByteArrayOutputStream baos = new ByteArrayOutputStream();  
                //定义读取的字节长度
                int len=0;
                //定义缓冲区大小
                byte[] buffer=new byte[1024];
                //从输入流中读取的数据放入buffer中
                while((len=in.read(buffer))!=-1)//read方法返回的是读取的字节长度,并且存放到了buffer数组中了
                {
                // 根据读取的长度写入到baos对象中
                baos.write(buffer,0,len);
                }
            //关闭流
                in.close();
                baos.close();
                //返回的请求结果:字符串
                final String result=new String(baos.toByteArray());
三: 

使用URLEncoder、URLDecoder进行URL参数的转码与解码

网页中的表单使用POST方法提交时,数据内容的类型是 application/x-www-form-urlencoded,
1、URLEncoder

类java.net.URLEncoder包括一个简单的静态方法encode( ), 它对string以如下规则进行编码:

  public static String encode(String s)

  这个方法总是用它所在平台的默认编码形式,所以在不同系统上,它就会产生不同的结果。结果java1.4中,这个方法被另一种方法取代了。该方法要求你自己指定编码形式:

  public static String encode(String s, String encoding) throws UnsupportedEncodingException



           
0 0
原创粉丝点击