1. Articles Android - utilisez okhttp pour demander la classe d'outils du package d'interface d'arrière-plan pour faciliter l'appel

problème:

Comment le côté Android lance-t-il une demande pour appeler l'interface de données principale pour obtenir l'effet d'interaction.

Remarque: Parfois, lorsque nous devons avoir une conversation avec l'arrière-plan, nous devons transporter des informations sur les cookies. Pour le moment, nous avons besoin de la méthode getCookie pour transporter les informations sur les cookies. Pour le moment, nous devons les enregistrer localement lors de la connexion. Nous l'aurons dans le prochain article Description détaillée.

1: Tout d'abord, nous devons importer les dépendances okhttp associées dans build.gradle

        implementation 'com.squareup.okhttp3:okhttp:3.10.0'  //okhttp
        implementation 'com.alibaba:fastjson:1.2.56'     //阿里json处理

2: Ensuite, vous pouvez utiliser okhttp pour appeler, le code est simplement encapsulé ici, le contenu est le suivant:

(1). Il s'agit de la classe d'outils demandée

package com.zjxf.utils;

import android.content.Context;

import com.alibaba.fastjson.JSONObject;
import com.zjxf.cache.CacheKeys;
import com.zjxf.common.SysConst;

import io.netty.util.internal.StringUtil;
import okhttp3.CacheControl;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

/**
 * created with IntelliJ IDEA
 *
 * @author: create by limu
 * Date: 2019/11/12
 * Time:9:39
 */
public class RequestUtils {

    public static final MediaType FORM_CONTENT_TYPE = MediaType.parse("application/json;charset=utf-8");

    private static final byte[] LOCKER = new byte[0];

    private static RequestUtils mInstance;

    /**
     * post请求不传递参数
     *
     * @param url      请求地址
     * @param callback 执行函数
     */
    public void postEmpty(Context context, String url, final Callback callback) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(splicingUrl(url)).post(okhttp3.internal.Util.EMPTY_REQUEST)
                .addHeader("Cookie", getCookie(context))
                .cacheControl(CacheControl.FORCE_NETWORK)
                .build();
        client.newCall(request).enqueue(callback);
    }

    /**
     * get请求不传递参数
     *
     * @param url      请求地址
     * @param callback 执行函数
     */
    public void getEmpty(Context context, String url, final Callback callback) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url).get()
                .addHeader("Cookie", getCookie(context))
                .cacheControl(CacheControl.FORCE_NETWORK)
                .build();
        client.newCall(request).enqueue(callback);
    }

    /**
     * 发送json数据
     *
     * @param url       请求地址
     * @param paramJson 发送json数据
     * @param callback  执行函数
     */
    public void postJson(String url, JSONObject paramJson, final Callback callback) {
        OkHttpClient client = new OkHttpClient();
        RequestBody requestBody = OkHttpUtils.setJSONBody(paramJson.toJSONString());
        Request request = new Request.Builder()
                .url(splicingUrl(url)).post(requestBody)
                .cacheControl(CacheControl.FORCE_NETWORK)
                .build();
        client.newCall(request).enqueue(callback);
    }


    /**
     * 发送表单数据
     *
     * @param url       请求地址
     * @param paramJson 请求参数
     * @param callback  执行函数
     */
    public void postForm(Context context, String url, JSONObject paramJson, final Callback callback) {
        OkHttpClient client = new OkHttpClient();
        RequestBody requestBody = OkHttpUtils.setFormBody(paramJson);
        Request request = new Request.Builder()
                .url(splicingUrl(url)).post(requestBody)
                .addHeader("Cookie", getCookie(context))
                .cacheControl(CacheControl.FORCE_NETWORK)
                .build();
        client.newCall(request).enqueue(callback);
    }


    /**
     * 发送表单数据
     *
     * @param url       请求地址
     * @param paramJson 请求参数
     * @param callback  执行函数
     */
    public void postFormByLogin(Context context, String url, JSONObject paramJson, final Callback callback) {
        OkHttpClient client = new OkHttpClient();
        RequestBody requestBody = OkHttpUtils.setFormBody(paramJson);
        Request request = new Request.Builder()
                .url(splicingUrl(url)).post(requestBody)
                .cacheControl(CacheControl.FORCE_NETWORK)
                .build();
        client.newCall(request).enqueue(callback);
    }

    /**
     * 单例模式获取RequestUtils
     *
     * @return RequestUtils
     */
    public static RequestUtils getInstance() {
        if (mInstance == null) {
            synchronized (LOCKER) {
                if (mInstance == null) {
                    mInstance = new RequestUtils();
                }
            }
        }
        return mInstance;
    }

    /**
     * 组合请求地址
     *
     * @param url 映射地址
     * @return 请求地址
     */
    private String splicingUrl(String url) {
        return SysConst.REMOTE_URL + url;
    }


    /**
     * 获取登录信息
     *
     * @param context 上下文对象
     * @return String
     */
    public String getCookie(Context context) {
        String sessionId = SharedPrefUtils.getInstance().getStrBykey(CacheKeys.LOGIN_SESSION_Id, StringUtil.EMPTY_STRING);
        if (sessionId.equals(StringUtil.EMPTY_STRING)) {
            return SysConst.EMPTY;
        } else {
            return sessionId;
        }
    }

}

(2). CacheKeys est une constante de la clé utilisée pour mettre en cache le cookie de connexion 

package com.zjxf.cache;

/**
 * created with IntelliJ IDEA
 *
 * @author: create by limu
 * Date: 2020/4/9
 * Time:10:31
 */
public class CacheKeys {

    public final static String LOGIN_USERNAME = "login_user_name:";
    public final static String THIS_SCHOOL_NAME = "this_school_name:";
    public final static String LOGIN_SESSION_Id = "login_session_id:";


}

 (3). SysConst est une gestion de la classe de constante système 

package com.zjxf.common;


/**
 * created with IntelliJ IDEA
 * <p>
 * 系统常量类
 * <p>
 * Date: 2020/2/12
 *
 * @author: create by limu
 * Time:16:23
 */
public class SysConst {

    public static final String REMOTE_URL = "http://39.100.143.199:8631";    //远程请求地址 后缀不加斜杆
}

3. Utilisation

 JSONObject paramJson = new JSONObject();
        paramJson.put("bankId", bankId);

        RequestUtils.getInstance().postForm(AnswerActivity.this, ResourceManagerUrlConstants.PSY_APP_FIND_BY_TOPICS, paramJson, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                runOnUiThread(() -> ToastUtils.showToastUnLine(AnswerActivity.this));
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String resultData = ResultUtils.getResultData(response, AnswerActivity.this);
            }
        });

Ce qui précède est utilisé lors de l'envoi de données de formulaire. La classe d'outil fournit également une méthode pour générer des données json et une méthode pour ne pas envoyer de données. Si vous avez des questions, vous pouvez laisser un message au bas du blog.

Je suppose que tu aimes

Origine blog.csdn.net/qq_38821574/article/details/113515546
conseillé
Classement