Android okHttp总结篇一
来源:互联网 发布:怎么卸载mac自带系统 编辑:程序博客网 时间:2024/05/01 15:26
在之前的项目中用到了okHttp框架,如今回头看,还是感觉似懂非懂,还得总结总结。
okHttp初体验
1.主要功能:
- get请求
- post请求
- 基于Http的文件上传
- 文件下载
- 加载图片
- 支持请求回调,直接返回对象、对象集合
- 支持session
2.图片下载
贴代码
1.module的build.gradle文件添加
compile 'com.squareup.okhttp3:okhttp:3.4.1'compile 'com.squareup.okio:okio:1.9.0'
2.xml布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout 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" android:orientation="vertical" tools:context="com.wyk.okhttp.okhttpdemo01.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="OkHttp初体验" android:id="@+id/button1" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView"/></LinearLayout>
3.MainActivity代码:
/** * OkHttp框架 * yk */public class MainActivity extends AppCompatActivity { private ImageView imageView; private Button button1; private final static int STATUS_FAILURE = 0; private final static int STATUS_SUCCESS = 1; private final static String Tag = MainActivity.class.getSimpleName(); private String img_path = "http://www.apkbus.com/data/attachment/common/cf/191843z46r2hhah5b25d6t.png"; private OkHttpClient client; private Request request; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch(msg.what){ case STATUS_SUCCESS: byte[] byt = (byte[])msg.obj; Bitmap bitmap = BitmapFactory.decodeByteArray(byt, 0, byt.length); /**Bitmap bitmap = new CropTransform().transform (BitmapFactory.decodeByteArray(byt, 0, byt.length));*/ imageView.setImageBitmap(bitmap); break; case STATUS_FAILURE: Toast.makeText(MainActivity.this,"加载失败[0,2]",Toast.LENGTH_SHORT).show(); break; default: break; } } }; /** * Could not find method java.nio.file.Files.newOutputStream, referenced from method okio.Okio.sink * 记得添加okio * */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_RIGHT_ICON); setContentView(R.layout.activity_main); imageView = findView(R.id.imageView); button1 = findView(R.id.button1); request = new Request.Builder().get().url(img_path).build(); client = new OkHttpClient(); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // e.printStackTrace(); Toast.makeText(MainActivity.this,"加载失败[0,1]",Toast.LENGTH_SHORT).show(); } @Override public void onResponse(Call call, Response response) throws IOException { Message message = handler.obtainMessage(); if(response != null && response.isSuccessful()){ message.what = STATUS_SUCCESS; message.obj = response.body().bytes(); handler.sendMessage(message); }else{ handler.sendEmptyMessage(STATUS_FAILURE); } } }); } }); } private <T> T findView(int viewId){ T view = (T) findViewById(viewId); return view; }}
4.最后别忘了清单文件添加 ” ”
运行效果
2.图片裁剪
- okHttp也提供了图片裁剪的功能
贴代码
1.build.gradle文件添加
compile 'com.squareup.picasso:picasso:2.5.2'
2.实现Transformation类,重写transform方法
/** * Created 2016/8/21. */public class CropTransform implements Transformation { @Override public Bitmap transform(Bitmap source) { int height = source.getHeight(); int width = source.getWidth(); int min = Math.min(height, width); int y = (height - min) / 2; int x = (width - min) / 2; /* Bitmap bitmap = Bitmap.createBitmap(source, x, y, width,height);导致的异常 下面是源码 if (x + width > source.getWidth()) { throw new IllegalArgumentException("x + width must be <= bitmap.width()"); 抛出的异常 } */ Bitmap bitmap = Bitmap.createBitmap(source,x,y, width, height); if(bitmap != source){ source.recycle(); } return bitmap; } @Override public String key() { return "picasso"; }}
3.MainActivity.java改为
private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch(msg.what){ case STATUS_SUCCESS: byte[] byt = (byte[])msg.obj; //Bitmap bitmap = BitmapFactory.decodeByteArray(byt, 0, byt.length); Bitmap bitmap = new CropTransform().transform (BitmapFactory.decodeByteArray(byt, 0, byt.length)); imageView.setImageBitmap(bitmap); break; case STATUS_FAILURE: Toast.makeText(MainActivity.this,"加载失败[0,2]",Toast.LENGTH_SHORT).show(); break; default: break; } } };
4.运行效果
总结:
- 1.相比Android系统的HttpURLConnection类,okHttp功能方面有着绝对的优势,而且HttpURLConnection需要手动封装
- 2.OkHttp使用Okio来大大简化数据的访问与存储,Okio是一个增强 java.io 和 java.nio的库。
0 0
- Android okHttp总结篇一
- Android OkHttp(一)初识
- Android之OKHttp使用总结
- OkHttp总结(一)--简单使用
- Android网络请求框架剖析一、Okhttp
- Android OKHttp介绍与使用(一)
- Android 网络请求(一)HttpURLConnection+OkHttp
- Android,I'm coming 之 OkHttp(一)
- Android中Okhttp的使用(一)
- okhttp总结
- OKHttp总结
- 网络请求框架 okhttp 简单的使用总结(一)
- Android OKHTTP
- Android OkHttp
- Android OKHTTP
- Android OKHttp
- Android OkHttp
- Android OkHttp
- Python学习笔记(一)
- PAT Basic 1034 有理数四则运算(20)
- Ubuntu入门学习bash和shell(3)
- UVA489 - Hangman Judge
- CardLayout(卡片布局)
- Android okHttp总结篇一
- 如何在一台windows主机上实现MySQL的主从复制?
- 如何利用百度在线地图获取坐标
- Maximum Product of Word Lengths
- iOS开发 ☞ 五分钟集成环信,你逗我?
- java基础(三)
- 3.Chrome开发者工具不完全指南(二、进阶篇)
- 很棒的AJAX跨域提交
- 织梦自定义表单添加验证码