Cinq méthodes de demande et précautions pour utiliser OkHttp sous Android

1. Description environnementale

1. Introduisez des dépendances dans gradle

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

2. Activez les autorisations réseau dans AndroidManifest

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

Remarque:

Après android9.0, Android interdit l'utilisation du protocole Http par défaut, et le protocole Https doit être utilisé, sinon une erreur sera signalée.

Insérez la description de l'image ici

Par conséquent, la demande d'utilisation du protocole Http doit ajouter des attributs dans AndroidManifest, android: usesCleartextTraffic = "true"

3. Créez une interface de test

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;
    }
}

Documentation de l'interface

La description Méthode de demande Paramètre de demande Demande d'adresse
Méthode GET, pas de paramètres AVOIR non / user / getUser
Méthode GET, paramètre Int AVOIR Int (id) / user / getParamUser
Méthode de publication, pas de paramètres PUBLIER non / user / postNoParamUser
Post méthode, avec paramètres PUBLIER Int (id) / user / postParamUser
Post méthode, paramètres Jsonized PUBLIER Objet (id , nom , sexe , studentId , sexe , données) / user / postObjectParamUser

4. Ecrire la classe d'outils 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();
        }
    }
}

Deux, envoyez la demande

1. Envoyez une demande Get sans paramètres

Utilisez des classes d'outils pour envoyer des requêtes réseau dans votre propre entreprise

	//无参接口
   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);
    }

Le résultat de l'impression est le suivant
E / ApiData :: {"id": 82, "name": "熊 顺", "studentId": "20181511011066", "sex": "男", "data": "Not have Parameter!" }

Insérez la description de l'image ici

2. Envoyez une demande Get avec des paramètres

Lorsque OkHttp envoie une requête Get, tous les paramètres de la requête sont placés dans l'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);
    }

Insérez la description de l'image ici

3. Envoyez une demande de publication sans paramètres

Vous devez apporter le corps de la demande lors de l'envoi d'une demande de publication

//无参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);
    }

Insérez la description de l'image ici

4. Envoyez une demande de position avec participation

Correction dans l'ajout en tant que type de chaîne

//有参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);
    }

Insérez la description de l'image ici

5. Envoyer les données Json de Post

L'envoi de données Json nécessite l'aide de JSONObject pour convertir les données au format 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);
    }

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/Android_Cob/article/details/108752542
conseillé
Classement