• Handler介绍


     

      下面举个例子:

      在main.xml文件中:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical">
     6 
     7     <ImageView
     8         android:id="@+id/imageView1"
     9         android:layout_width="fill_parent"
    10         android:layout_height="0dp"
    11          android:layout_weight="7"/>
    12 
    13     <Button
    14         android:id="@+id/button1"
    15         android:layout_width="fill_parent"
    16         android:layout_height="0dp"
    17         android:background="@drawable/shape_button"
    18         android:layout_weight="1"
    19         android:text="下载图片" />
    20 </LinearLayout>

      在MainActivity.java文件中:

    package com.example.handler1;
    
    import java.io.IOException;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.graphics.BitmapFactory;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    
        private String image_path = "http://p0.so.qhimg.com/t01aa653c8cd80777a5.jpg";
        private Message message;
        private Button button;
        private ProgressDialog dialog;
        private ImageView imageView;
        private Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                // TODO 自动生成的方法存根
                super.handleMessage(msg);
                byte[] data = (byte[]) msg.obj;
                imageView.setImageBitmap(BitmapFactory.decodeByteArray(data, 0,data.length));
                if(1 == msg.what){
                    dialog.dismiss();
                }
            }
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            dialog = new ProgressDialog(MainActivity.this);
            dialog.setTitle("提示");
            dialog.setMessage("正在下载,请稍候...");
            button = (Button) findViewById(R.id.button1);
            button.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // TODO 自动生成的方法存根
                    dialog.show();
                    dialog.setCancelable(false);
                    new Thread(new MyThread()).start();
                }
            });
            
        imageView = (ImageView) findViewById(R.id.imageView1);
        
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        private class MyThread implements Runnable{
    
            @Override
            public void run() {
                // TODO 自动生成的方法存根
                
                HttpClient client = new DefaultHttpClient();
                HttpGet get = new HttpGet(image_path);
                try {
                    HttpResponse response = client.execute(get);
                    if(response.getStatusLine().getStatusCode() == 200){
                        HttpEntity entity = response.getEntity();
                        byte[] data = EntityUtils.toByteArray(entity);
                        message = Message.obtain();
                        message.obj = data;
                        message.what = 1;
                        handler.sendMessage(message);
                    }
                    
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
            
        }
    }

      在AndroidManifest.xml文件中配置下网络权限:

      <uses-permission android:name="android.permission.INTERNET"/>

      运行结果:

  • 相关阅读:
    2019-07-08 L410 EST科技英语翻译
    L405 NYC-ATF4
    L403 Royal espionage
    L402 EST
    L401 哭声识别
    L400 How Trees Affect the Weather
    L398
    final, finally, finalize 的区别
    try {}里有一个 return 语句, 那么紧跟在这个 try 后的 finally {}里的 code会不会被执行,什么时候被执行,在 return 前还是后?
    下 面 这 条 语 句 一 共 创 建 了 多 少 个 对 象 : String s="a"+"b"+"c"+"d";
  • 原文地址:https://www.cnblogs.com/SoulCode/p/5469116.html
Copyright © 2020-2023  润新知