1. 程式人生 > >使用OKhttp載入網路上的圖片

使用OKhttp載入網路上的圖片

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btnOK;
    private ImageView imgShow;

    private String Path = "http://g.hiphotos.baidu.com/zhidao/pic/item/1e30e924b899a901da2aece318950a7b0308f5cc.jpg";
    private static final int SUCCESS = 1;
    private static final int FALL = 2;
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                //載入網路成功進行UI的更新,處理得到的圖片資源
                case SUCCESS:
                    //通過message,拿到位元組陣列
                    byte[] Picture = (byte[]) msg.obj;
                    //使用BitmapFactory工廠,把位元組陣列轉化為bitmap
                    Bitmap bitmap = BitmapFactory.decodeByteArray(Picture, 0, Picture.length);
                    //通過imageview,設定圖片
                    imgShow.setImageBitmap(bitmap);

                    break;
                //當載入網路失敗執行的邏輯程式碼
                case FALL:
                    Toast.makeText(MainActivity.this, "網路出現了問題", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        btnOK = (Button) findViewById(R.id.btnOK);
        imgShow = (ImageView) findViewById(R.id.imgShow);

        btnOK.setOnClickListener(this);
    }

    @Override
    //根據點選事件獲取網路上的圖片資源,使用的是okhttp框架
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnOK:
                //1.建立一個okhttpclient物件
                OkHttpClient okHttpClient = new OkHttpClient();
                //2.建立Request.Builder物件,設定引數,請求方式如果是Get,就不用設定,預設就是Get
                Request request = new Request.Builder()
                        .url(Path)
                        .build();
                //3.建立一個Call物件,引數是request物件,傳送請求
                Call call = okHttpClient.newCall(request);
                //4.非同步請求,請求加入排程
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {

                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                       //得到從網上獲取資源,轉換成我們想要的型別
                        byte[] Picture_bt = response.body().bytes();
                        //通過handler更新UI
                        Message message = handler.obtainMessage();
                        message.obj = Picture_bt;
                        message.what = SUCCESS;
                        handler.sendMessage(message);
                    }
                });
                break;
        }
    }
}