OKHttp笔记

首先要引包:
com.squareup.okhttp3:okhttp:3.4.1'
添加权限:
联网,读写权限;
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
代码:
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "aaa";
    private TextView iv;
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
          switch (msg.what){
              case 100:{
                  Bitmap bitmap = (Bitmap) msg.obj;
                  iv.setBackgroundDrawable(new BitmapDrawable(bitmap));
              }break;
              case 200:{
                  String ss= (String) msg.obj;
                 iv.setText(ss);
              }break;
              case 300:{
                  String ss= (String) msg.obj;
                  iv.setText(ss);
              }
              case 555:{
                  Bitmap bitmap= (Bitmap) msg.obj;
                  iv.setBackgroundDrawable(new BitmapDrawable(bitmap));
              }
          }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv= (TextView) findViewById(R.id.iv);
    }



     //下载图片
    public void aaa(View view){

        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient client=new OkHttpClient.Builder()
                        .connectTimeout(10, TimeUnit.SECONDS)
                        //服务器支持缓存的情况下
                        //添加缓存,没网时也能加载出来
                        .cache(new Cache(getApplicationContext().getExternalCacheDir(),20*1024*1024))
               //服务器不支持缓存情况下我们就需要使用Interceptor来重写Respose的头部信息,从而让okhttp支持缓存。
                        .addNetworkInterceptor(new Interceptor() {
                            @Override
                            public Response intercept(Chain chain) throws IOException {
                                Request request = chain.request();
                                Response response = chain.proceed(request);
                                Response response1 = response.newBuilder()
                                        .removeHeader("Pragma")
                                        .removeHeader("Cache-Control")
                                        //cache for 30 days                 3600秒,24小时,30天
                                        .header("Cache-Control", "max-age=" + 3600 * 24 * 30)
                                        .build();
                                return response1;
                            }
                        })
                        .build();

                Request request=new Request.Builder()
                        .url("http://www.ytmfdw.com/image/img2.jpg")
                        .build();

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

                    if(response.isSuccessful())
                    {
                        InputStream inputStream = response.body().byteStream();
                        Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
                        Message message=handler.obtainMessage();
                        message.what=100;
                        message.obj=bitmap;
                        handler.sendMessage(message);


                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

     //下载字符串
    public void bbb(View view){

        new Thread(new Runnable() {
            @Override
            public void run() {

                OkHttpClient client=new OkHttpClient.Builder()
                        .connectTimeout(5,TimeUnit.SECONDS)
 //服务器支持缓存的情况下
         //添加缓存,没网时也能加载出来
         .cache(new Cache(getApplicationContext().getExternalCacheDir(),20*1024*1024))
//服务器不支持缓存情况下我们就需要使用Interceptor来重写Respose的头部信息,从而让okhttp支持缓存。
         .addNetworkInterceptor(new Interceptor() {
             @Override
             public Response intercept(Chain chain) throws IOException {
                 Request request = chain.request();
                 Response response = chain.proceed(request);
                 Response response1 = response.newBuilder()
                         .removeHeader("Pragma")
                         .removeHeader("Cache-Control")
                         //cache for 30 days                 3600秒,24小时,30天
                         .header("Cache-Control", "max-age=" + 3600 * 24 * 30)
                         .build();
                 return response1;
             }
         })
                        .build();
                Request request=new Request.Builder()
                        .url("http://image.baidu.com/search/detail?ct=503316480&z=0&ipn=false&word=%E7%BE%8E%E5%A5%B3%E5%9B%BE%E7%89%87&hs=0&pn=4&spn=0&di=0&pi=20905405197&rn=1&tn=baiduimagedetail&is=0%2C167799&ie=utf-8&oe=utf-8&cl=2&lm=-1&cs=539019579%2C1503243384&os=&simid=&adpicid=0&ln=30&fr=ala&fm=&sme=&cg=girl&bdtype=-1&oriquery=&objurl=http%3A%2F%2Ff.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2Fa8014c086e061d9507500dd67ff40ad163d9cacd.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3B4ztp7_z%26e3Bv54AzdH3Flbcn&gsm=")
                        .build();
                try {
                    Response response=client.newCall(request).execute();
                    String string = response.body().string();
                    Message msg=handler.obtainMessage();
                    msg.what=200;
                    msg.obj=string;
                    handler.sendMessage(msg);

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

     //访问
    public void ccc(View view) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient client=new OkHttpClient.Builder()
                        .readTimeout(5,TimeUnit.SECONDS)
                        .connectTimeout(5,TimeUnit.SECONDS)
                        .build();

                FormBody formBody=new FormBody.Builder()
                        .add("name","woshishazi")
                        .add("password","1232131")
                        .build();


                Request request=new Request.Builder()
                        .url("http://10.20.156.55:8080/AndroidTestServer/fileupload")
                        .method("POST",formBody)
                        .build();
                try {
                    Response response=client.newCall(request).execute();

                    if (response.isSuccessful()) {

                        String result = response.body().string();
                        Message msg=handler.obtainMessage();
                        msg.what=300;
                        msg.obj=result;
                        handler.sendMessage(msg);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();
    }

    //异步任务
    public void ddd(View view) {

        new Thread(new Runnable() {
            @Override
            public void run() {

                OkHttpClient client=new OkHttpClient.Builder()
                        .build();
                Request request=new Request.Builder()
                        .url("http://www.ytmfdw.com/image/img7.jpg")
                        .build();
                client.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {

                        Log.d(TAG, "onFailure() called with: " + "call = [" + call + "], e = [" + e + "]");
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {

                        if(response.isSuccessful()) {

                            InputStream inputStream = response.body().byteStream();
                            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                            Message message = handler.obtainMessage();
                            message.what = 555;
                            message.obj = bitmap;
                            handler.sendMessage(message);

                        }else
                        {
                            Log.d(TAG, "onResponse: ");
                        }
                    }
                });
            }
        }).start();
    }
    //存储流操作
    public void yk(View view) {

        /*new Thread(new Runnable() {
            @Override
            public void run() {

                OkHttpClient client=new OkHttpClient.Builder()
                        .connectTimeout(10,TimeUnit.SECONDS)
                        .build();

                Request request=new Request.Builder()
                        .url("http://www.ytmfdw.com/image/oom.jpg")
                        .build();
                try {
                    Response respond=client.newCall(request).execute();

                    if (respond.isSuccessful()){

                        byte[] bytes = respond.body().bytes();
                        FileOutputStream fs=new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/"+"My Gril"+".jpg"));
                        fs.write(bytes,0,bytes.length);
                        fs.flush();
                        fs.close();
                       System.out.print("储存成功");

                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }*/


        new Thread(new Runnable() {
            @Override
            public void run() {
                //配置client
                OkHttpClient client = new OkHttpClient.Builder().build();

                //配置请求
                Request request = new Request.Builder()
                        .url("https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1481169050&di=8a4a00c11254c5972a6cef3c6c516f0b&src=http://h.hiphotos.baidu.com/image/pic/item/dc54564e9258d1093cf78e5cd558ccbf6d814dc3.jpg")
                        .build();

                //client发起请求
                try {
                    Response response = client.newCall(request).execute();

                    //解析Response
                    if (response.isSuccessful()) {
                        byte[] bytes = response.body().bytes();

                        //流文件操作
                        FileOutputStream fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + File.separator + "hello.jpg"));
                        fos.write(bytes, 0, bytes.length);
                        fos.flush();
                        fos.close();

                        System.out.println("存储成功!");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    //上传文件
    public void kkk(View view) {

        //配置client
        OkHttpClient client = new OkHttpClient.Builder().build();

        RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"),new File(Environment.getExternalStorageDirectory()+"/"+"My Gril.jpg"));
//        RequestBody fileBody2 = RequestBody.create(MediaType.parse("text/x-markdown; charset=utf-8"),new File(Environment.getExternalStorageDirectory()+"/"+""));

        MultipartBody multipartBody = new MultipartBody.Builder()
                //上传一张图片
                .addPart(new FormBody.Builder().add("name","333333").build())
                .addFormDataPart("image","666.jpg", fileBody)
                .build();
        Request request=new Request.Builder()
                .url("http://10.20.156.55:8080/AndroidTestServer/fileupload")
                .post(multipartBody)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.print("onFailure");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result = response.body().string();
                Message msg=handler.obtainMessage();
                msg.what=300;
                msg.obj=result;
                handler.sendMessage(msg);
            }
        });

        }
}
布局文件:
<?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:orientation="vertical"
    tools:context="com.example.okhttp.MainActivity">

    <TextView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
         />

    <Button
        android:layout_width="match_parent"
        android:text="下载图片"
        android:onClick="aaa"
        android:layout_margin="2dp"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:text="下载String"
        android:onClick="bbb"
        android:layout_margin="2dp"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:text="访问"
        android:onClick="ccc"
        android:layout_margin="2dp"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:text="下载文件"
        android:onClick="yk"
        android:layout_margin="2dp"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:text="异步任务"
        android:onClick="ddd"
        android:layout_margin="2dp"
        android:layout_height="wrap_content" />

<Button
    android:layout_width="match_parent"
    android:text="上传文件"
    android:onClick="kkk"
    android:layout_margin="2dp"
    android:layout_height="wrap_content" />
</LinearLayout>


运行结果:

多加了上传文件:


猜你喜欢

转载自blog.csdn.net/yang__k/article/details/80216664