You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java代码实现:输入NIK点击GET按钮显示对应NAMA

完善Android Retrofit请求的onResponse逻辑实现NIK查询NAMA功能

数据库结构示例

CREATE TABLE users (
    nik VARCHAR(20) PRIMARY KEY,
    nama VARCHAR(100) NOT NULL
);

完善后的Android Java代码

1. Retrofit接口定义

public interface UserApi {
    @GET("get_user.php")
    Call<UserResponse> getUserByNik(@Query("nik") String nik);
}

2. 响应数据模型类

public class UserResponse {
    private boolean success;
    private String nama;

    // Getter & Setter
    public boolean isSuccess() { return success; }
    public void setSuccess(boolean success) { this.success = success; }
    public String getNama() { return nama; }
    public void setNama(String nama) { this.nama = nama; }
}

3. Activity完整逻辑(含完善的onResponse)

public class MainActivity extends AppCompatActivity {
    private EditText etNik;
    private EditText etNama;
    private Button btnGet;
    private UserApi userApi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etNik = findViewById(R.id.et_nik);
        etNama = findViewById(R.id.et_nama);
        btnGet = findViewById(R.id.btn_get);

        // 初始化Retrofit
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://你的服务器地址/") // 替换为实际后端地址
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        userApi = retrofit.create(UserApi.class);

        btnGet.setOnClickListener(v -> {
            String inputNik = etNik.getText().toString().trim();
            if (inputNik.isEmpty()) {
                Toast.makeText(this, "请输入NIK", Toast.LENGTH_SHORT).show();
                return;
            }

            Call<UserResponse> call = userApi.getUserByNik(inputNik);
            call.enqueue(new Callback<UserResponse>() {
                @Override
                public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {
                    // 核心完善逻辑
                    if (response.isSuccessful() && response.body() != null) {
                        UserResponse res = response.body();
                        if (res.isSuccess()) {
                            // 查询成功,填充NAMA字段
                            etNama.setText(res.getNama());
                        } else {
                            // 无匹配NIK,清空并提示
                            etNama.setText("");
                            Toast.makeText(MainActivity.this, "未找到该NIK对应的用户", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        // 响应异常处理
                        Toast.makeText(MainActivity.this, "请求失败:" + response.message(), Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onFailure(Call<UserResponse> call, Throwable t) {
                    // 网络错误处理
                    Toast.makeText(MainActivity.this, "网络异常:" + t.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
        });
    }
}

PHP后端接口代码(get_user.php)

<?php
// 数据库配置
$servername = "localhost";
$dbUser = "你的数据库用户名";
$dbPass = "你的数据库密码";
$dbName = "你的数据库名";

// 建立连接
$conn = new mysqli($servername, $dbUser, $dbPass, $dbName);
if ($conn->connect_error) {
    die(json_encode(["success" => false, "msg" => "数据库连接失败"]));
}

// 获取前端传入的NIK
$nik = isset($_GET['nik']) ? trim($_GET['nik']) : "";
if (empty($nik)) {
    echo json_encode(["success" => false, "msg" => "NIK不能为空"]);
    exit;
}

// 预处理查询(防止SQL注入)
$stmt = $conn->prepare("SELECT nama FROM users WHERE nik = ?");
$stmt->bind_param("s", $nik);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    $user = $result->fetch_assoc();
    echo json_encode(["success" => true, "nama" => $user['nama']]);
} else {
    echo json_encode(["success" => false, "msg" => "无匹配用户"]);
}

// 关闭资源
$stmt->close();
$conn->close();
?>

关键说明

  • 确保Retrofit依赖已添加到项目的build.gradle中
  • 数据模型类的字段名需与后端返回的JSON字段严格对应
  • 后端使用预处理语句避免SQL注入风险
  • 所有网络操作需在主线程外执行(Retrofit的enqueue已自动处理)

内容的提问来源于stack exchange,提问作者Farrasta K S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:05:21