Cinco métodos de solicitud y precauciones para usar OkHttp en Android

1. Descripción ambiental

1. Introduce dependencias en gradle

    implementation 'com.squareup.okhttp3:okhttp:3.12.1'
    debugImplementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'

2. Active los permisos de red en AndroidManifest

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

Nota:

Después de android9.0, Android prohíbe el uso del protocolo Http de forma predeterminada, y se debe usar el protocolo Https; de lo contrario, se informará un error.

Inserte la descripción de la imagen aquí

Entonces, la solicitud para usar el protocolo Http debe agregar atributos en AndroidManifest, android: usesCleartextTraffic = "true"

3. Cree una interfaz de prueba

package com.icodingzy.androidback.controller;

import com.icodingzy.androidback.pojo.User;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("user")
public class UserController {
    
    
    /**
     * GET NoParameter
     * @return
     */
    @GetMapping("getUser")
    public Object getUser() {
    
    
        User user = new User();
        user.setId((int) (Math.random()*100));
        user.setName("熊顺");
        user.setStudentId("201815110110" + (int) (Math.random()*100));
        user.setSex("男");
        user.setData("Not have Parameter!");
        return user;
    }

    /**
     * GET TakeParameter
     * @param id userId
     * @return
     */
    @GetMapping("getParamUser")
    public Object getParamUser(Integer id){
    
    
        User user = new User();
        user.setId(id);
        user.setName("熊顺");
        user.setStudentId("201815110110" + (int) (Math.random()*100));
        user.setSex("男");
        user.setData("parameter is " + id);
        return user;
    }
    /**
     * Post NoParameter
     * @return
     */
    @PostMapping("postNoParamUser")
    public Object postNoParamUser(){
    
    
        User user = new User();
        user.setId((int) (Math.random()*100));
        user.setName("熊顺");
        user.setStudentId("201815110110" + (int) (Math.random()*100));
        user.setSex("男");
        user.setData("Not have parameter");
        return user;
    }
    /**
     * Post TakeParameter
     * @param id userId
     * @return
     */
    @PostMapping("postParamUser")
    public Object postParamUser(Integer id){
    
    
        User user = new User();
        user.setId(id);
        user.setName("熊顺");
        user.setStudentId("201815110110" + (int) (Math.random()*100));
        user.setSex("男");
        user.setData("parameter is " + id);
        return user;
    }
    /**
     * Post ObjectParameter
     * @return
     */
    @PostMapping("postObjectParamUser")
    public Object postObjectParamUser(@RequestBody User user){
    
    
        return user;
    }
}

Documentación de la interfaz

Descripción Método de solicitud Solicitar parámetro Solicitar dirección
Método GET, sin parámetros OBTENER No / usuario / getUser
Método GET, parámetro Int OBTENER Int (id) / usuario / getParamUser
Método de publicación, sin parámetros ENVIAR No / usuario / postNoParamUser
Método de publicación, con parámetros ENVIAR Int (id) / usuario / postParamUser
Método de publicación, parámetros Jsonizados ENVIAR Objeto (id, nombre, sexo, id. Del estudiante, sexo, datos) / usuario / postObjectParamUser

4. Escriba la clase de herramienta OkHttp

package com.zhuoyue.travelwh.OkHttpUtil;


import android.app.ProgressDialog;
import android.content.Context;
import android.util.Log;


import com.zhuoyue.travelwh.bean.MsgBean;

import org.greenrobot.eventbus.EventBus;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OkHttpUtil {
    
    
    public static ProgressDialog dialog;

    /**
     * 发送网络请求
     * @param url 请求Url
     * @param context 上下文对象
     * @param body 请求体,如果有请求体则发送Post请求,反之发送Get请求
     */
    public static void getHttpRequset(String url, Context context, RequestBody body) {
    
    
        startDialog(context);
        OkHttpClient client = new OkHttpClient();

        Request request = null;
        
            //Post请求
        if (body != null) {
    
    
            request = new Request.Builder()
                    .url(url)
                    .post(body)
                    .build();
        } else {
    
    
        //Get请求
            request = new Request.Builder()
                    .url(url)
                    .get()
                    .build();
        }

        client.newCall(request).enqueue(new Callback() {
    
    
            /*请求失败时的回调*/
            @Override
            public void onFailure(Call call, IOException e) {
    
    
                stopDialog();
                Log.e("onFailure: ", e.getMessage());
            }
            /*请求成功时的回调*/
            @Override
            public void onResponse(Call call, Response response) throws IOException {
    
    
                stopDialog();
                Log.e("ApiData:", response.body().string());
            }
        });
    }

    /**
     * 显示等待框
     * @param context
     */
    public static void startDialog(Context context) {
    
    
        dialog = new ProgressDialog(context);
        dialog.setMessage("数据加载。。。");
        dialog.setTitle("请稍后");
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }

    /**
     * 关闭等待框
     */
    public static void stopDialog() {
    
    
        if (dialog != null) {
    
    

            dialog.dismiss();
        }
    }
}

Dos, envía la solicitud

1. Envíe una solicitud Get sin parámetros

Utilice clases de herramientas para enviar solicitudes de red en su propio negocio

	//无参接口
   private final String url = "http://xxxxxx/user/getParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        OkHttpUtil.getHttpRequset(url,this,null);
    }

El resultado de la impresión es el siguiente
E / ApiData :: {"id": 82, "name": "熊 顺", "studentId": "20181511011066", "sex": "男", "data": "¡No tiene parámetro!" }

Inserte la descripción de la imagen aquí

2. Envía una solicitud Get con parámetros

Cuando OkHttp envía una solicitud Get, todos los parámetros de la solicitud se colocan en la URL

//有参Get接口
   private final String url = "http://xxxxxx/user/getParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        OkHttpUtil.getHttpRequset(url + "?id=9999",this,null);
    }

Inserte la descripción de la imagen aquí

3. Envía una solicitud de publicación sin parámetros

Debe traer el cuerpo de la solicitud al enviar una solicitud de publicación

//无参Post接口
   private final String url = "http://xxxxxx/user/postNoParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        RequestBody body = new FormBody.Builder()
                        .build();
                OkHttpUtil.getHttpRequset(url, this, body);
    }

Inserte la descripción de la imagen aquí

4. Envíe una solicitud Pos con participación

Se corrigió en agregar como tipo de cadena

//有参Post接口
   private final String url = "http://xxxxxx/user/postParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        RequestBody body = new FormBody.Builder()
                        .add("id","8888")
                        .build();
                OkHttpUtil.getHttpRequset(url, this, body);
    }

Inserte la descripción de la imagen aquí

5. Enviar datos Json de la publicación

El envío de datos Json requiere la ayuda de JSONObject para convertir los datos en formato Json

//Json化参数Post接口
   private final String url = "http://xxxxxx/user/postObjectParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        JSONObject jsonObject = new JSONObject();
                try {
    
    
                    jsonObject.put("id",1111111);
                    jsonObject.put("name","顺");
                    jsonObject.put("studentId","123123");
                    jsonObject.put("sex","小萌新");
                    jsonObject.put("data","I have pan");
                } catch (JSONException e) {
    
    
                    e.printStackTrace();
                }
                RequestBody body = FormBody.create(MediaType.parse("application/json;charset=utf-8"), jsonObject.toString());

                OkHttpUtil.getHttpRequset(url, this, body);
    }

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/Android_Cob/article/details/108752542
Recomendado
Clasificación