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
相关产品推荐
相关产品推荐

