使用OkHttp发送HTTP请求并显示返回的数据

准备工作:
编辑 app/build.gradle文件,在dependencies闭包中添加以下内容:

 implementation 'com.squareup.okhttp3:okhttp:4.0.1'

添加上述依赖会自动下载两个库,一个是OkHttp库,一个是Okio库,后者是前者的通信基础。其中4.0.1是我写这篇博客时的最新版本,你可以访问OkHttp的项目主页来查看当前的最新版本是多少,OkHttp的项目主页地址如下:

OkHttp的项目主页

添加网络权限,在AndroidManifest.xml文件中加入以下代码:

 <uses-permission android:name="android.permission.INTERNET" />

我们先来看下程序运行的效果图:
使用OkHttp发送HTTP请求并显示返回的数据_第1张图片
这里就是点击按钮,发送请求,然后显示返回的数据。

MainActivity的xml布局代码如下:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_send_request"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发送请求"
        android:textSize="20sp" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/response_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    ScrollView>

LinearLayout>

MainActivity的java代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button mBtn_sendRequest;
    private TextView mTv_responseText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn_sendRequest = findViewById(R.id.btn_send_request);
        mTv_responseText = findViewById(R.id.response_text);
        mBtn_sendRequest.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_send_request:
                // 发送网络请求并读取的方法
                sendRequestWithOkHttp();
                break;
            default:
                break;
        }
    }

    private void sendRequestWithOkHttp() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 创建一个OkHttpClient的实例
                    OkHttpClient client = new OkHttpClient();
                    // 如果要发送一条HTTP请求,就需要创建一个Request对象
                    // 可在最终的build()方法之前连缀很多其他方法来丰富这个Request对象
                    Request request = new Request.Builder()
                            .url("https://www.baidu.com")
                            .build();
                    // 调用OkHttpClient的newCall()方法来创建一个Call对象,并调用execute()方法来发送请求并获取服务器的返回数据
                    Response response = client.newCall(request).execute();
                    // 其中Response对象就是服务器返回的数据,将数据转换成字符串
                    String responseData = response.body().string();
                    // 将获取到的字符串传入showResponse()方法中进行UI显示
                    showResponse(responseData);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }


    // 返回主线程并执行更改UI操作
    private void showResponse(final String string) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //这里进行UI操作
                mTv_responseText.setText(string);
            }
        });
    }

}

你可能感兴趣的:(Android开发)