1. Androidの記事-okhttpを使用して、呼び出しを容易にするためのバックグラウンドインターフェイスパッケージツールクラスをリクエストします

問題:

相互作用の効果を達成するために、Android側はどのようにしてバックエンドデータインターフェースを呼び出す要求を開始しますか。

注:バックグラウンドで会話する必要がある場合は、Cookie情報を伝達する必要があります。このとき、Cookie情報を伝達するためのgetCookieメソッドが必要です。このとき、ログイン時にローカルに保存する必要があります。これについては次の記事で説明します。詳細な説明。

1:まず、関連するokhttpの依存関係をbuild.gradleにインポートする必要があります

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

2:次に、okhttpを使用して呼び出すことができます。コードはここにカプセル化されているだけで、内容は次のとおりです。

(1)これは要求されたツールクラスです

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は、ログインCookieをキャッシュするために使用されるキーの定数です。 

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は、システム定数クラスの管理です。 

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.使用法

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

上記はフォームデータを送信するときに使用されます。ツールクラスは、jsonデータを生成するメソッドとデータを送信しないメソッドも提供します。質問がある場合は、ブログの下部にメッセージを残すことができます。

おすすめ

転載: blog.csdn.net/qq_38821574/article/details/113515546
おすすめ