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.