zoukankan      html  css  js  c++  java
  • OKhttp基本使用介绍

    MainActivity.class

      1 package com.example.administrator.okhttp3;
      2 
      3 import android.support.v7.app.AppCompatActivity;
      4 import android.os.Bundle;
      5 import android.util.Log;
      6 import android.view.View;
      7 import android.widget.Button;
      8 import android.widget.TextView;
      9 
     10 import java.io.File;
     11 import java.io.FileOutputStream;
     12 import java.io.IOException;
     13 import java.io.InputStream;
     14 
     15 import okhttp3.Call;
     16 import okhttp3.Callback;
     17 import okhttp3.FormBody;
     18 import okhttp3.OkHttpClient;
     19 import okhttp3.Request;
     20 import okhttp3.RequestBody;
     21 import okhttp3.Response;
     22 
     23 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
     24     private static OkHttpClient client = new OkHttpClient();
     25     private Request request;
     26     private Response response;
     27 
     28     private Button button1, button2, button3, button4;
     29     private TextView textView;
     30 
     31     @Override
     32     protected void onCreate(Bundle savedInstanceState) {
     33         super.onCreate(savedInstanceState);
     34         setContentView(R.layout.activity_main);
     35         button1 = (Button) findViewById(R.id.btn_one);
     36         button2 = (Button) findViewById(R.id.btn_two);
     37         button3 = (Button) findViewById(R.id.btn_three);
     38         button4 = (Button) findViewById(R.id.btn_four);
     39         button1.setOnClickListener(this);
     40         button2.setOnClickListener(this);
     41         button3.setOnClickListener(this);
     42         button4.setOnClickListener(this);
     43         textView = (TextView) findViewById(R.id.tv);
     44     }
     45 
     46     @Override
     47     public void onClick(View view) {
     48         switch (view.getId()) {
     49             case R.id.btn_one://同步get
     50                 client = new OkHttpClient();
     51                 request = new Request.Builder().url("http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=jsonp9").build();
     52                 new Thread(new Runnable() {
     53                     @Override
     54                     public void run() {
     55                         try {
     56                             response = client.newCall(request).execute();
     57                             final String src = response.body().string();
     58                             Log.e("Tag", response.body().string());
     59                             runOnUiThread(new Runnable() {
     60                                 @Override
     61                                 public void run() {
     62                                     textView.setText(src);
     63                                 }
     64                             });
     65 
     66                         } catch (IOException e) {
     67                             e.printStackTrace();
     68                         }
     69                     }
     70                 }).start();
     71 
     72                 break;
     73             case R.id.btn_two://异步get
     74                 request = new Request.Builder().url("http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=jsonp9").build();
     75                 client.newCall(request).enqueue(new Callback() {
     76                     @Override
     77                     public void onFailure(Call call, IOException e) {
     78 
     79                     }
     80 
     81                     @Override
     82                     public void onResponse(Call call, Response response) throws IOException {
     83                         final String src = response.body().string();
     84                         Log.e("Tag", response.body().string());
     85                         runOnUiThread(new Runnable() {
     86                             @Override
     87                             public void run() {
     88                                 textView.setText(src);
     89                             }
     90                         });
     91                     }
     92                 });
     93                 break;
     94             case R.id.btn_three://提交表单
     95                 RequestBody requestBody = new FormBody.Builder()
     96                         .add("search", "papap").build();
     97                 request = new Request.Builder().url("https://en.wikipedia.org/w/index.php").post(requestBody).build();
     98                 client.newCall(request).enqueue(new Callback() {
     99                     @Override
    100                     public void onFailure(Call call, IOException e) {
    101 
    102                     }
    103 
    104                     @Override
    105                     public void onResponse(Call call, Response response) throws IOException {
    106                         final String src = response.body().string();
    107                         runOnUiThread(new Runnable() {
    108                             @Override
    109                             public void run() {
    110                                 textView.setText(src);
    111                             }
    112                         });
    113                     }
    114                 });
    115                 break;
    116             case R.id.btn_four://文件下载
    117                 request = new Request.Builder().url("http://pic2.ooopic.com/10/18/01/04bOOOPICb3.jpg").build();
    118                 client.newCall(request).enqueue(new Callback() {
    119                     @Override
    120                     public void onFailure(Call call, IOException e) {
    121 
    122                     }
    123 
    124                     @Override
    125                     public void onResponse(Call call, Response response) throws IOException {
    126                         InputStream inputStream = response.body().byteStream();
    127                         FileOutputStream fileOutputStream = new FileOutputStream(new File("/sdcard/tupian.jpg"));
    128                         byte[] buffer = new byte[2048];//每次循环读取2K的数据
    129 
    130                         int len = 0;
    131                         while ((len = inputStream.read(buffer)) != -1) {
    132                             fileOutputStream.write(buffer, 0, len);
    133                         }
    134                         fileOutputStream.flush();
    135 
    136                         runOnUiThread(new Runnable() {
    137                             @Override
    138                             public void run() {
    139                                 textView.setText("文件下载成功。。。");
    140                             }
    141                         });
    142                     }
    143                 });
    144                 break;
    145         }
    146     }
    147 }


    PS:需要注意的是,在进行同步Get网络请求时,因为都是一个耗时操作,所以需要建立一个子线程去进行请求; 并且,UI界面的更新,必须放在主线程去完成!

    activity_main.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6     android:orientation="vertical"
     7     android:paddingBottom="@dimen/activity_vertical_margin"
     8     android:paddingLeft="@dimen/activity_horizontal_margin"
     9     android:paddingRight="@dimen/activity_horizontal_margin"
    10     android:paddingTop="@dimen/activity_vertical_margin"
    11     tools:context="com.example.administrator.okhttp3.MainActivity">
    12 
    13     <Button
    14         android:id="@+id/btn_one"
    15         android:layout_width="wrap_content"
    16         android:layout_height="wrap_content"
    17         android:text="同步get" />
    18 
    19     <Button
    20         android:id="@+id/btn_two"
    21         android:layout_width="wrap_content"
    22         android:layout_height="wrap_content"
    23         android:text="异步get" />
    24 
    25     <Button
    26         android:id="@+id/btn_three"
    27         android:layout_width="wrap_content"
    28         android:layout_height="wrap_content"
    29         android:text="Post提交表单" />
    30 
    31     <Button
    32         android:id="@+id/btn_four"
    33         android:layout_width="wrap_content"
    34         android:layout_height="wrap_content"
    35         android:text="文件下载" />
    36 
    37     <TextView
    38         android:id="@+id/tv"
    39         android:layout_width="wrap_content"
    40         android:layout_height="wrap_content"
    41         android:text="text"/>
    42 </LinearLayout>

  • 相关阅读:
    os.path.split()、os.path.realpath()和os.path.join()
    我终于也有了自己的博客网站
    (Bug修复)C#爬虫,让你不再觉得神秘
    DevExpress弹框、右键菜单、Grid的使用
    Linux 宝塔部署 ASP.NET Core 应用
    C#高级特性(反射)
    WPF 的内部世界(Binding)
    WPF 的内部世界(控件与布局)
    Layui事件监听(表单和数据表格)
    (待更新)tensorboard [Fatal error in launcher: Unable to create process using]
  • 原文地址:https://www.cnblogs.com/huolongluo/p/5915417.html
Copyright © 2011-2022 走看看