亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

使用OkHttp

標簽:
Java Android

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()

https://img1.sycdn.imooc.com//5f9403ec00017fda06731114.jpg


點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消