OkHttp get请求

get请求

可直接看后面的解释

可仔细去看看着文章:https://www.jianshu.com/p/9aa969dd1b4d

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/contentTv"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

MainActivity.java

package com.example.okhttp;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {
    private TextView contentTv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        contentTv=findViewById(R.id.contentTv);

//1、拿到OKHttpClient对象
        OkHttpClient okHttpClient=new OkHttpClient();
//2、构造Request对象
        Request request= new Request.Builder()  //这里我们采用建造者模式和链式调用指明是进行Get请求,
                                                //并传入Get请求的地址
                .get()
                .url("https://www.baidu.com")
                .build();
//3、将Request封装为Call
        Call call=okHttpClient.newCall(request);
//4、根据需要调用同步或者异步请求方法
        //同步调用,一般不用同步,因为同步调用会阻塞主线程,一般不适用
//        try {
//            Response response=call.execute();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }


        //异步调用

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {  //未收到服务器返回的结果
                Toast.makeText(MainActivity.this, "get failed", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException { //从onResponse中获得了返回的json数据
            final String res=response.body().string();
            runOnUiThread(new Runnable() {  //异步调用的回调函数是在子线程,我们不能在子线程更新UI,需要借助于runOnUiThread()方法或者Handler来处理
                @Override
                public void run() {
                    contentTv.setText(res);
                }
            });
            }
        });
    }
}

注意,在准备工作做好了才能运行成功

运行结果:

在这里插入图片描述

 
 
 
相关解释:

使用OkHttp进行Get请求只需要四步即可完成。

 
1 . 拿到OkHttpClient对象

OkHttpClient client = new OkHttpClient();
//OkTttp是网络请求框架,Client是客户,所以是客户网络请求框架

 

2 . 构造Request对象

创建一个请求的建造者让他返回给请求对象

Request request = new Request.Builder()
                .get()
                .url("https:www.baidu.com")
                .build();
//request 请求    Builder建造者

这里我们采用建造者模式和链式调用指明是进行Get请求,并传入Get请求的地址

 
如果我们需要在get请求时传递参数,我们可以以下面的方式将参数拼接在url之后

"https:www.baidu.com?username=admin&password=admin"
//注意这里是加的一个&

 

3 . 将Request封装为Call

Call call = client.newCall(request);

 

4 . 根据需要调用同步或者异步请求方法

//同步调用,返回Response,会抛出IO异常
Response response = call.execute();

//异步调用,并设置回调函数
call.enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        Toast.makeText(OkHttpActivity.this, "get failed", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onResponse(Call call, final Response response) throws IOException {
        final String res = response.body().string();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                contentTv.setText(res);
            }
        });
    }
});

 

第四步有一些需要注意的地方

  1. 同步调用会阻塞主线程,一般不适用
  2. 异步调用的回调函数是在子线程,我们不能在子线程更新UI,需要借助于runOnUiThread()方法或者Handler来处理

是不是以为上面就结束了,对的,OkHttp的Get请求步骤就这么4步,但是当你试图打开应用加载数据,可是发现并没有加载到数据,这是一个简单但是我们常犯的错误.
在AndroidManifest.xml中加入联网权限

<uses-permission android:name="android.permission.INTERNET" />
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值