Android使用okHttp(get方式)下载图片

所属分类: 软件编程 / Android 阅读数: 1766
收藏 0 赞 0 分享

一、首先下载Jar包

https://github.com/square/okhttp 

如果使用android studio只需要加入依赖compile 'com.squareup.okhttp3:okhttp:3.2.0'  

二、下载一张图片并显示
使用的是hanlder的方式 

package com.liunan.okhttpdemo2;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;

public class MainActivity extends AppCompatActivity {


 private static final int ERROR = 1;
 private static final int SUCCESS = 2 ;
 private String url = "http://192.168.1.102:8080/img/a.jpg";
 private ImageView mIv;

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

 }

 private Handler handler = new Handler(){
 @Override
 public void handleMessage(Message msg) {
  switch (msg.what){
  case SUCCESS:
   mIv.setImageBitmap((Bitmap) msg.obj);
   break;

  case ERROR:

   Toast.makeText(MainActivity.this, "请求超时", Toast.LENGTH_SHORT).show();

   break;
  }
 }
 };

 /**
 * 初始化 组件
 */
 private void initView() {

 mIv = (ImageView) findViewById(R.id.main_iv);
 }


 /**
 * 点击获取图片
 */
 public void getPic(View v){


 new Thread(){
  @Override
  public void run() {
  //获取okHttp对象get请求,

  try {
   OkHttpClient client = new OkHttpClient();

   //获取请求对象
   Request request = new Request.Builder().url(url).build();

   //获取响应体

   ResponseBody body = client.newCall(request).execute().body();

   //获取流
   InputStream in = body.byteStream();
   //转化为bitmap
   Bitmap bitmap = BitmapFactory.decodeStream(in);

   //使用Hanlder发送消息
   Message msg = Message.obtain();

   msg.what = SUCCESS;
   msg.obj = bitmap;

   handler.sendMessage(msg);



  } catch (IOException e) {
   e.printStackTrace();
   //失败
   Message msg = Message.obtain();
   msg.what = ERROR;

   handler.sendMessage(msg);
  }


  }
 }.start();
 }


}

也可以把网络请求写为一个工具类, 

package com.liunan.okhttpdemo2;

import java.io.IOException;
import java.io.InputStream;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by 刘楠 on 2016-03-27.
 */
public class OkHttpUtils {

 OkHttpClient client = new OkHttpClient();

 /**
 * 获取流
 * @param url 请求地址
 * @return 输入流
 */
 public InputStream getInpuStream(String url) throws IOException {
 //设置 请求
 Request request = new Request.Builder()
  .url(url).build();


 //获取行响应

 InputStream in = client.newCall(request).execute().body().byteStream();

 return in;


 }

 /**
 * 返回字符串
 * @param url
 * @return 返回字符串
 * @throws IOException
 */
 public String getString(String url) throws IOException {
 //设置 请求
 Request request = new Request.Builder()
  .url(url).build();


 //获取行响应

 Response response = client.newCall(request).execute();

 return response.body().string();


 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android样式和主题之选择器的实例讲解

今天小编就为大家分享一篇关于Android样式和主题之选择器的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Android应用动态修改主题的方法示例

今天小编就为大家分享一篇关于Android应用动态修改主题的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter 网络请求框架封装详解

这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Flutter倒计时/计时器的实现代码

这篇文章主要介绍了Flutter倒计时/计时器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android使用google breakpad捕获分析native cash

这篇文章主要介绍了Android使用google breakpad捕获分析native cash 的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Flutter WebView与JS互相调用简易指南

这篇文章主要介绍了详解Flutter WebView与JS互相调用简易指南,分为JS调用Flutter和Flutter调用JS,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android开发实现ListView和adapter配合显示图片和文字列表功能示例

这篇文章主要介绍了Android开发实现ListView和adapter配合显示图片和文字列表功能,涉及Android使用ListView结合adapter适配器实现图文显示功能相关的布局、解析、权限控制等操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android文字基线Baseline算法的使用讲解

今天小编就为大家分享一篇关于Android文字基线Baseline算法的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter自定义实现神奇动效的卡片切换视图的示例代码

这篇文章主要介绍了Flutter自定义实现神奇动效的卡片切换视图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现自定义滑动刻度尺方法示例

这篇文章主要给大家介绍了关于Android实现自定义滑动刻度尺的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多