讲解Android如何请求SpringBoot数据接口

模拟下Android的请求SpringBoot的数据接口

1. 创建SpringBoot项目

在 pom.xml 加入

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.76</version>
</dependency>
import lombok.*;

@Data
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
}

import com.alibaba.fastjson.JSON;
import com.example.demo.pojo.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {

    @GetMapping("/getUserInfo")
    public String getUserInfo(){
        List<User> userList = new ArrayList<>();
        User user = User.builder()
                .id(1)
                .name("hello")
                .build();
        User user1 = User.builder()
                .id(2)
                .name("world")
                .build();

        userList.add(user);
        userList.add(user1);
        
        return JSON.toJSONString(userList);
    }
}

在这里插入图片描述

2. 创建 Android项目

选择Empty图片
网络权限

 <uses-permission android:name="android.permission.INTERNET" />

添加网络配置

manifests application

     android:networkSecurityConfig="@xml/network_security_config"

res\xml\network-security-confy.xml

<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

引入依赖

// https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
    implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.9.1'
// https://mvnrepository.com/artifact/org.projectlombok/lombok
    implementation group: 'org.projectlombok', name: 'lombok', version: '1.18.20'
    annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.20'
// https://mvnrepository.com/artifact/com.alibaba/fastjson
    implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.76'

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
}


import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.chsengni.myapplication.pojo.User;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.util.List;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class HttpUtil {

    private final static int SUCCESS = 1;
    private final static int FAIL = 0;
    private static Context AppContext;

    public static void GetRequest(Context context, String url){
        AppContext = context;
        Thread thread = new Thread(){
            @Override
            public void run() {
                getResponseBody(url);
                super.run();
            }
        };

        thread.start();
    }


    public static void getResponseBody(String url){

        final Message msg = handler.obtainMessage();

        OkHttpClient okHttpClient = new OkHttpClient();

        String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36";

        Bundle bundle = new Bundle();

        Request okRequest = new Request.Builder()
                .url(url)
                .addHeader("User-Agent",userAgent)
                .build();

        okHttpClient
                .newCall(okRequest)
                .enqueue(new Callback() {
                    @Override
                    public void onFailure(@NotNull Call call, @NotNull IOException e) {
                        msg.what = FAIL;
                        String error = e.getMessage();
                        bundle.putString("error",error);
                        msg.setData(bundle);
                        handler.sendMessage(msg);
                    }

                    @Override
                    public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                        msg.what = SUCCESS;
                        String data = response.body().string();
                        bundle.putString("data",data);
                        msg.setData(bundle);
                        handler.sendMessage(msg);
                    }
                });
    }


    @SuppressLint("HandlerLeak")
    public static Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SUCCESS:

                    String response = msg.getData().getString("data");
                    List<User> userList = JSON.parseArray(response, User.class);
                    for (User user:userList) {
                        Toast.makeText(AppContext, "ID="+ user.getId() +"  Name="+user.getName(), Toast.LENGTH_LONG).show();
                    }
                    break;
                case FAIL:
                    Toast.makeText(AppContext, msg.getData().getString("error"),Toast.LENGTH_LONG).show();
                    break;
                default:
                    super.handleMessage(msg);
            }
        }
    };

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        HttpUtil.GetRequest(getApplicationContext(),"http://192.168.3.101:8080/getUserInfo");

    }
}

192.168.3.101 局域网IP

3. 结果

在这里插入图片描述
在这里插入图片描述

  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈增林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值