AndroidでOkHttpを使用するための5つのリクエストメソッドと注意事項

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

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Android_Cob/article/details/108752542