記事ディレクトリ
1.環境の説明
1. Gradleに依存関係を導入する
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
debugImplementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
2. AndroidManifestでネットワーク権限をオンにします
<uses-permission android:name="android.permission.INTERNET"/>
注意:
android9.0以降、AndroidではデフォルトでHttpプロトコルの使用が禁止されており、Httpsプロトコルを使用する必要があります。使用しない場合、エラーが報告されます。
したがって、Httpプロトコルを使用するリクエストでは、AndroidManifest、android:usesCleartextTraffic = "true"に属性を追加する必要があります
3.テストインターフェースを構築する
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;
}
}
インターフェイスのドキュメント
説明 | リクエスト方法 | リクエストパラメーター | リクエストアドレス |
---|---|---|---|
GETメソッド、パラメーターなし | 取得する | 番号 | / user / getUser |
GETメソッド、Intパラメータ | 取得する | Int(id) | / user / getParamUser |
Postメソッド、パラメーターなし | 役職 | 番号 | / user / postNoParamUser |
Postメソッド、パラメーターあり | 役職 | Int(id) | / user / postParamUser |
Postメソッド、Jsonizedパラメーター | 役職 | Object(id、name、sex、studentId、sex、data) | / user / postObjectParamUser |
4. 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();
}
}
}
2、リクエストを送信する
1.パラメータなしで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,this,null);
}
印刷結果は次のとおりです
。E / ApiData :: {"id":82、 "name": "Xiong Shun"、 "studentId": "20181511011066"、 "sex": "男"、 "data": "パラメータなし!" }
2.パラメータ付きのGetリクエストを送信します
OkHttpがGetリクエストを送信すると、すべてのリクエストパラメータが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);
}
3.パラメータなしでPOSTリクエストを送信します
Postリクエストを送信するときは、リクエストの本文を持参する必要があります
//无参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);
}
4.参加してPosリクエストを送信する
文字列型として追加で修正
//有参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);
}
5. PostのJsonデータを送信する
Jsonデータを送信するには、JSONObjectを使用してデータを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);
}