1. 程式人生 > >使用Okhttp網路請求下載圖片到指定資料夾

使用Okhttp網路請求下載圖片到指定資料夾

   一.在module中新增依賴

   compile 'com.squareup.okhttp3:okhttp:3.6.0'

  二.設定佈局

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height=
"match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.zhiyuan3g.myokhttpupload.MainActivity">


     <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上傳"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="56dp" />

     <ImageView
android:layout_width="wrap_content"
android
:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
 </RelativeLayout>  

  三.使用okhttp下載圖片到指定資料夾

  OkHttpClient okHttpClient=new OkHttpClient();
  Request request=new Request.Builder()
        .get()
        .url("http://pic.qiantucdn.com/58pic/17/85/35/559de1de9b223_1024.jpg")
        .build();
  Call call=okHttpClient.newCall(request);
  call.enqueue(new Callback() {
      @Override
public void onFailure(Call call, IOException e) {

      }

      @Override
public void onResponse(Call call, Response response) throws IOException {
         //將響應資料轉化為輸入流資料
InputStream inputStream=response.body().byteStream();
          //將輸入流資料轉化為Bitmap點陣圖資料
Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
          File file=new File("/mnt/sdcard/picture.jpg");
          file.createNewFile();
          //建立檔案輸出流物件用來向檔案中寫入資料
FileOutputStream out=new FileOutputStream(file);
          //將bitmap儲存為jpg格式的圖片
bitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
          //重新整理檔案流
out.flush();
          out.close();
          Message msg=Message.obtain();
          msg.obj=bitmap;
          handler.sendMessage(msg);
      }
  });

 四.如果要把下載的圖片顯示出來,可以在主執行緒中新增自定義Handler內部類  private Handler handler=new Handler(){
     @Override
public void handleMessage(Message msg) {
         image.setImageBitmap((Bitmap) msg.obj);
     }
 };