当前位置: 首页 > news >正文

Android和springboot的后端json数据库mysql传送

Android软件配制:

写一个 Android 注册界面 + 调用后端接口 的完整示例。
我们假设后端是你上面写的 Spring Boot 注册接口:
POST http://10.0.2.2:8080/api/register

一定要在编辑器的Androidstudio使用ip为10.0.2.2这个ip等同于调用电脑主机的本地接口,如果用localhost就是调用模拟器的本地接口,不是电脑的本地接口。


✅ 一、效果说明

界面:

  • 用户名输入框

  • 密码输入框

  • 注册按钮
    点击注册后,会将用户名和密码传到后端接口,显示返回结果。


✅ 二、布局文件 activity_main.xml

放在路径:res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#F8F9FA"android:fillViewport="true"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="vertical"android:padding="32dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="注册" /><EditTextandroid:id="@+id/editUsername"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:drawable/editbox_background"android:hint="请输入用户名"android:inputType="textPersonName"android:padding="12dp" /><EditTextandroid:id="@+id/editPassword"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="16dp"android:background="@android:drawable/editbox_background"android:hint="请输入密码"android:inputType="textPassword"android:padding="12dp" /><Buttonandroid:id="@+id/btnRegister"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="24dp"android:background="@drawable/ic_launcher_background"android:text="注册"android:textColor="@android:color/white"android:textStyle="bold" /></LinearLayout>
</ScrollView>

✅ 三、Java 代码 MainActivity.java

放在 app/java/com/example/yourapp/

package com.example.demo1;import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import org.json.JSONObject;import java.io.IOException;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;public class MainActivity extends AppCompatActivity {private EditText editUsername, editPassword;private Button btnRegister;// Spring Boot 后端地址private static final String REGISTER_URL = "http://10.0.2.2:8080/api/register";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editUsername = findViewById(R.id.editUsername);editPassword = findViewById(R.id.editPassword);btnRegister = findViewById(R.id.btnRegister);btnRegister.setOnClickListener(v -> {String username = editUsername.getText().toString().trim();String password = editPassword.getText().toString().trim();if (username.isEmpty() || password.isEmpty()) {Toast.makeText(this, "请输入用户名和密码", Toast.LENGTH_SHORT).show();} else {registerUser(username, password);}});}private void registerUser(String username, String password) {OkHttpClient client = new OkHttpClient();JSONObject json = new JSONObject();try {json.put("username", username);json.put("password", password);} catch (Exception e) {e.printStackTrace();}RequestBody body = RequestBody.create(json.toString(),MediaType.parse("application/json; charset=utf-8"));Request request = new Request.Builder().url(REGISTER_URL).post(body).build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {runOnUiThread(() ->Toast.makeText(MainActivity.this, "网络请求失败", Toast.LENGTH_SHORT).show());Log.e("Register", "请求失败: " + e.getMessage());}@Overridepublic void onResponse(Call call, Response response) throws IOException {String res = response.body().string();Log.d("Register", "响应: " + res);runOnUiThread(() -> {try {JSONObject obj = new JSONObject(res);Log.d("obj:", String.valueOf(obj));int code = obj.optInt("code", -1);String msg = obj.optString("message", "未知错误");Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();if (code == 200) {// 注册成功跳转到登录页startActivity(new Intent(MainActivity.this, LoginActivity.class));}} catch (Exception e) {e.printStackTrace();Toast.makeText(MainActivity.this, "解析返回数据失败", Toast.LENGTH_SHORT).show();}});}});}
}

注意:

E:\Androidstudioproject\demo1\app\src\main\AndroidManifest.xml

里面添加

android:networkSecurityConfig="@xml/network_security_config"
<uses-permission android:name="android.permission.INTERNET" />

E:\Androidstudioproject\demo1\app\src\main\res\xml里新建

network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config><!-- 允许访问本地开发服务器 --><domain-config cleartextTrafficPermitted="true"><domain includeSubdomains="true">10.0.2.2</domain></domain-config>
</network-security-config>

这个允许http明文。

✅ 四、Gradle 依赖

app/build.gradle 中添加 OkHttp 依赖:

dependencies {implementation 'com.squareup.okhttp3:okhttp:4.12.0'
}

✅ 五、后端接口配合

后端 Spring Boot 接口(前面写的):

POST http://localhost:8080/api/register

在 Android 模拟器中访问本机用:

http://10.0.2.2:8080/api/register

如果你用真机测试,请把服务器改成局域网 IP,比如:

http://192.168.1.100:8080/api/register

✅ 六、运行结果

🔹 输入用户名 + 密码 → 点击“注册”
🔹 Android 调用后端接口
🔹 后端返回 { "code":200, "message":"注册成功" }
🔹 App 弹出 Toast 提示 “注册成功”

springboot作后端,配置:

application.properties:

spring.application.name=demo
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/admins?useSSL=false&serverTimezone=UTCspring.datasource.username=root
#??mysql???????????
#?????????
spring.datasource.password=# JPA ??
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!-- MySQL JDBC 驱动 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version> <!-- 或最新稳定版 --></dependency></dependencies>

package com.example.demo.register;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping("/api")
public class RegisterController {@Autowiredprivate UserRepository userRepository;@PostMapping("/register")public Map<String, Object> register(@RequestBody User user) {Map<String, Object> response = new HashMap<>();// 检查用户名是否已存在if (userRepository.existsByUsername(user.getUsername())) {response.put("code", 400);response.put("message", "用户名已存在");return response;}// 保存到数据库userRepository.save(user);response.put("code", 200);response.put("message", "注册成功");return response;}
}

package com.example.demo.register;import jakarta.persistence.*;@Entity
@Table(name="test_user")
public class User {private String username;private String password;@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id; // 自动生成主键public User() {}public User(String username, String password) {this.username = username;this.password = password;}public String getUsername() { return username; }public void setUsername(String username) { this.username = username; }public String getPassword() { return password; }public void setPassword(String password) { this.password = password; }public void setId(Long id) {this.id = id;}public Long getId() {return id;}
}

package com.example.demo.register;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface UserRepository extends JpaRepository<User, Long> {boolean existsByUsername(String username);
}

http://www.dtcms.com/a/553724.html

相关文章:

  • 旅游网站系统商标购买网商标
  • 好用的 display: flow-root
  • 做路牌的网站深圳做外贸网站公司
  • C++笔记(面向对象)多重继承 菱形继承
  • 淘宝商品详情 API(taobao.item.get)从 0 到 1:申请流程、核心参数与首次调用实战
  • 大连市建设部网站官网权威的网站建设公司
  • 【Day 83】虚拟化-openstack
  • C语言类型转换和溢出常见错误
  • 《计算类云服务》
  • CentOS7 搭建DHCP服务器(一台服务器虚拟机+2台客户端虚拟机演示)
  • 【MySQL】mysqldump使用方法
  • Docker化你的Python应用:从开发到生产
  • 做网站需要多少兆空间安徽网站优化好不好
  • 【weblogic】协议反序列化漏洞
  • LeetCode 287. 寻找重复数
  • C#理论学习-WinForm实践开发教程总结
  • 深入浅出 ES Module
  • 深度学习专题:模型训练的数据并行(二)
  • 企业网站建设方案新闻网站购买域名
  • C++ STL 有序关联容器高频面试题解析
  • 腾讯风铃怎么做网站成都哪家做网站
  • 二叉树核心算法分类精讲:选择、遍历与结构关系
  • 【人工智能系列:走近人工智能05】基于 PyTorch 的机器学习开发与部署实战
  • Arbess零基础学习,创建第一条流水线
  • Linux DNS 深度解析与最佳实践
  • RGB转换为NV12,查表式算法
  • PostIn零基础学习,创建第一个项目
  • 百度网站优化排行做响应式网站应该注意什么
  • 女生化妆品网站建设规划书该网站的域名为
  • 基于NvVideoEncoder的H265视频编码器