Android 与 SpringBoot后端数据交互

本次环境

  • 后端
    • MySql 5.7
    • Java 1.8
    • Maven 3.6.3
    • 其余与博客项目相同
  • Android端
    • okHttp 4.9.3
    • ADV API30
    • Gradle 4.0.1

SpringBoot后台

项目来自前后端分离博客项目,顺便记录下自己运行项目的步骤

  1. 下载压缩包直接用 idea open 项目文件
  2. 打开文件后可能 maven 还没下载包,找到 pom.xml (在vueblog-java文件夹) 右键 找到 maven 点击 add as maven
  3. 创建数据库,找到sql文件并添加两条语句,然后用 Navicat 执行 sql文件,这里的数据库是5.7

  4. 找到 配置文件修改数据库的地址或密码。也是在这个文件看到数据库的名称为 vueblog

  5. 进入VueblogApplication 文件启动后台
  6. 此时后台已经跑起来了,得运行前端了,在vueblog-vue文件夹右键选择 open in terminal
  7. 运行 npm install
  8. 运行 npm install github-markdown-css 具体看前后端分离博客项目
  9. 运行npm run serve

Android前端

package com.example.helloworld.okhttp_learn;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.helloworld.R;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;

import org.json.JSONArray;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OkhttpLearnActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_okhttp_learn);
        final Button btnGetBlogs = findViewById(R.id.btn_okhttpLearn_getBlogs);

        btnGetBlogs.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                // Android 4.0 之后不能在主线程中请求HTTP请求
                new Thread(new Runnable(){
                    @Override
                    public void run() {
                        String json = "{\"username\":\"MarkerHub\",\"password\":\"111111\"}";
                        OkHttpClient client = new OkHttpClient();//创建Http客户端
                        Request request = new Request.Builder()
                                .url("http://192.168.56.1:8081/login")//***.***.**.***为本机IP,xxxx为端口,/  /  为访问的接口后缀
                                .post(RequestBody.create(MediaType.parse("application/json"),json))
                                .build();//创建Http请求
                        Log.d("test",json);
                        try {
                            Response response = client.newCall(request).execute();//执行发送的指令
                            Log.d("test", "response success");
                            final String responseData = response.body().string();//获取返回的结果
                            Log.d("test",responseData);
                        } catch (IOException e) {
                            e.printStackTrace();
                            Log.d("test", "response failed");
                        }
                    }
                }).start();

            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".okhttp_learn.OkhttpLearnActivity">

    <Button
        android:id="@+id/btn_okhttpLearn_getBlogs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取数据"/>

</LinearLayout>

在AndroidManifest.xml中添加网络请求的权限

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

我出现的问题与解决方法

在端口测试工具中测试是正常的,显示如下

但是会抛出异常,网上有说将http改成https,但依然会抛出异常

但其实在配置文件中添加一下语句即可,java.net.UnknownServiceException: CLEARTEXT communication to t.main.wedeep.com.cn not permitted by network security policy

android:usesCleartextTraffic="true"

最终成功运行

posted on 2022-03-24 21:36  stuMartin  阅读(1768)  评论(0编辑  收藏  举报

导航