1. Artículos de Android: utilice okhttp para solicitar la clase de herramienta del paquete de interfaz en segundo plano para facilitar la llamada.

problema:

¿Cómo inicia el lado de Android una solicitud para llamar a la interfaz de datos de back-end para lograr el efecto de interacción?

Nota: A veces, cuando necesitamos tener una conversación con el fondo, necesitamos llevar la información de la cookie. En este momento, necesitamos el método getCookie para llevar la información de la cookie. En este momento, necesitamos guardarlo localmente al iniciar sesión. Lo tendremos en el próximo artículo Descripción detallada.

1: Primero, necesitamos importar las dependencias okhttp relacionadas en build.gradle

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

2: Luego puede usar okhttp para llamar, el código simplemente se encapsula aquí, el contenido es el siguiente:

(1). Esta es la clase de herramienta solicitada.

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 es una constante para la clave utilizada para almacenar en caché la cookie de inicio de sesión 

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 es una gestión de la clase constante del sistema 

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. Uso

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

Lo anterior se usa cuando se envían datos de formulario. La clase de herramienta también proporciona un método para generar datos json y un método para no enviar datos. Si tiene alguna pregunta, puede dejar un mensaje en la parte inferior del blog.

Supongo que te gusta

Origin blog.csdn.net/qq_38821574/article/details/113515546
Recomendado
Clasificación