You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在自定义对话框中获取EditText的值并提交至服务器

我来帮你完善这个实现,让你能顺利获取对话框输入并发送到服务器~

实现带EditText的自定义对话框并提交输入到服务器

咱们核心要解决的是弹出带输入框的自定义对话框、获取用户输入、异步发送到服务器这几个环节,下面是完整的实现方案:

1. 完整的FAB点击事件代码

FloatingActionButton fab = (FloatingActionButton) item.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    // 假设你需要用到的参数可以在这里正常访问
    private int mClientNumber = 123;
    private int mRecordNumber = 456;

    @Override
    public void onClick(View v) {
        // 1. 加载自定义对话框的布局
        LayoutInflater inflater = LayoutInflater.from(v.getContext());
        View dialogView = inflater.inflate(R.layout.dialog_input_notes, null);
        
        // 2. 获取对话框里的EditText控件
        EditText notesEt = dialogView.findViewById(R.id.et_notes);

        // 3. 构建并显示AlertDialog
        new AlertDialog.Builder(v.getContext())
                .setTitle("添加备注")
                .setView(dialogView)
                .setPositiveButton("提交", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // 4. 获取用户输入的内容,先做非空校验
                        String userNotes = notesEt.getText().toString().trim();
                        if (userNotes.isEmpty()) {
                            Toast.makeText(v.getContext(), "请输入备注内容", Toast.LENGTH_SHORT).show();
                            return;
                        }

                        // 5. 调用方法把数据发送到服务器
                        sendNotesToServer(userNotes, mClientNumber, mRecordNumber);
                    }
                })
                .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
                .show();
    }

    // 封装发送数据到服务器的方法(这里用OkHttp做示例,你可以换成自己常用的网络框架)
    private void sendNotesToServer(String notes, int clientNum, int recordNum) {
        OkHttpClient client = new OkHttpClient();
        // 构建请求参数
        RequestBody requestBody = new FormBody.Builder()
                .add("notes", notes)
                .add("client_number", String.valueOf(clientNum))
                .add("record_number", String.valueOf(recordNum))
                .build();

        Request request = new Request.Builder()
                .url("你的服务器接口地址") // 替换成实际的接口URL
                .post(requestBody)
                .build();

        // 异步发送请求,避免阻塞主线程
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                // 请求失败时,回到主线程提示用户
                v.getContext().runOnUiThread(() -> 
                        Toast.makeText(v.getContext(), "发送失败:" + e.getMessage(), Toast.LENGTH_SHORT).show());
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                v.getContext().runOnUiThread(() -> {
                    if (response.isSuccessful()) {
                        Toast.makeText(v.getContext(), "备注提交成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(v.getContext(), "提交失败:服务器返回错误", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
    }
});

2. 自定义对话框的布局文件(dialog_input_notes.xml)

res/layout目录下创建这个布局,用来放置输入框:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <EditText
        android:id="@+id/et_notes"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入备注信息"
        android:inputType="textMultiLine"
        android:minLines="3"/> <!-- 设置最小行数,方便输入多行内容 -->

</LinearLayout>

3. 关键注意事项

  • 网络权限:别忘了在AndroidManifest.xml里添加网络权限:
    <uses-permission android:name="android.permission.INTERNET"/>
    
  • 主线程更新UI:所有和UI相关的操作(比如Toast提示)必须在主线程执行,所以网络回调里用了runOnUiThread
  • 参数访问:如果mClientNumbermRecordNumber是外部变量,要确保它们在点击事件里可以正常访问(比如声明为final或者使用Java 8+的lambda表达式)。
  • 输入校验:一定要对用户输入做非空或格式校验,避免发送无效数据到服务器。

内容的提问来源于stack exchange,提问作者aaronfarr

火山引擎 最新活动