继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用OkHttp

慕尼黑0536602
关注TA
已关注
手记 37
粉丝 3
获赞 6

OkHttp的主页地址:https://github.com/square/okhttp

添加依赖:

implementation("com.squareup.okhttp3:okhttp:4.9.0")
implementation("com.squareup.okio:okio:2.8.0")

Okio库是前者的通信基础。

下面我们来看一下OkHttp的具体用法,首先

第一步,需要创建一个OkHttpClient的实例,如下所示:

OkHttpClient client = new OkHttpClient(); // 创建一个实例

第二步,如果你想要发起一条HTTP请求,就需要创建一个Request对象:

//发起一条HTTP请求
Request request = new Request.Builder().build();

当然,上述代码只是创建了一个空的Request对象,并没有什么实际的作用。我们可以在最终的build()方法之前连缀很多其他方法来丰富这个Request对象。比如,可以通过url()方法来设置目标的网络地址,如下:

Request request = new Request.Builder()
        .url("http://www.baidu.com")
        .build();


第三步,调用OkHttpClient的newCall()方法来创建一个call对象,并调用它的execute()方法来发送请求并获取服务器返回的数据:

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

其中,Response对象就是服务器返回的数据了,我们可以使用如下写法来得到返回的具体内容:

String responseData = response.body().string();


如果是发起一条POST,我们需要先构建出一个Request Body对象来存放待提交的 参数,如下所示:

RequestBody requestBody = new FormBody.Builder()
        .add("username","admin")
        .add("password","123456")
        .build();

然后在Request.Builder中调用一下post()方法,并将RequestBody对象传入:

Request request = new Request.Builder()
        .url("http://baidu.com")
        .post(requestBody)
        .build();

接下来的操作就跟GET请求一样了,调用execute()方法来发送请求并获取服务器返回的数据即可。


接下来用一个完整的实例来演示上面的做法:

package com.example.webviewapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {
   private Button send,upload;
   private TextView txt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        send = findViewById(R.id.send_request);
        txt = findViewById(R.id.response_txt);
        upload = findViewById(R.id.upload);

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendRequestWithOkHttp();
            }
        });

    }

    private void sendRequestWithOkHttp() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient client = new OkHttpClient();
                Request request = new Request.Builder()
                        .url("http://www.baidu.com")
                        .build();
                try {
                    Response response = client.newCall(request).execute();
                    String responseData = response.body().string();
                    showRequest(responseData);
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();
    }

    private void showRequest(final String responseData) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                txt.setText(responseData);
            }
        });
    }

}

这里很重要的知识点:

  1. 网络请求一定要用new Thread()开线程

  2. 在UI界面上显示,一定要用runOnUiThread()

http://img4.mukewang.com/5f9403ec00017fda06731114.jpg


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP